我如何查看从 GSON JsonReader 收到了多少字节

     2023-02-26     212

关键词:

【中文标题】我如何查看从 GSON JsonReader 收到了多少字节【英文标题】:How can i see how many bytes was received from GSON JsonReader 【发布时间】:2013-02-14 02:09:59 【问题描述】:

在阅读here 并使用 JsonWriter 和 JsonReader 创建一个要发送和接收的大型对象时。我想跟踪发送的总字节数。

【问题讨论】:

【参考方案1】:

JsonWriterJsonReader 中没有任何内容可以为您提供这些。

真正做到这一点的唯一方法是包装/扩展您当前传递给JsonReader/JsonWriterReaderWriter 并跟踪正在读取/写入/输出的字节.

编辑添加:例如,您可以执行以下操作:

class MyWriterWrapper extends Writer 

    private Writer realWriter;
    private int bytesWritten;

    public MyWriterWrapper(Writer realWriter) 
        super(); 
        this.realWriter = realWriter;
    

    public int getBytesWritten() 
        return bytesWritten;
    

    @Override
    public Writer append(CharSequence csq) throws IOException 
         realWriter.append(csq);
         bytesWritten += csq.length();
         return this;
    

    // Implement/Override all other Writer methods the same way


如果Writer 是一个界面,那会更干净,但是……嗯,你能做什么。如果你知道你只会使用一种类型的Writer(比如BufferedWriter),你可以扩展它,覆盖所有方法并重新调用this上的方法而不是私有@987654332 @instance 通过构造函数传入。

【讨论】:

这是我的想法。如果有一个具有此功能的 gson 克隆,那就太好了,如果我能做到这一点,我会升级一个 这仅适用于Writer,不适用于Reader。【参考方案2】:

没有从 JsonReader 获取接收字节数的默认方法。我写了一个小技巧,下面提到:

    从输入流中读取字节并将它们写入内部存储文件

    while ((count = inputStream.read(data)) != -1)  
                  total += count;
                  final long downloadedLength = total;
                  final long totalLength = lengthOfData;
               **// Here you get the size of bytes received**
                  outStream.write(data, 0, count);
              
    

    关闭所有打开的流(上面创建的输入和输出流)

    打开新建文件的输入流

    InputStream 流 = mContext.openFileInput(FILE_NAME); InputStreamReader inputStreamReader = new InputStreamReader(stream);

    现在您有了 JsonReader 的输入流(流)

    让 JsonReader 使用这个输入流来解析数据

    解析完成后,删除你创建的临时使用的文件

    InputStream 流 = mContext.openFileInput(FILE_NAME); InputStreamReader inputStreamReader = new InputStreamReader(stream); jsonReader = 新的 JsonReader(inputStreamReader); parseMyJSON(jsonReader);

    文件 file = new File(mContext.getFilesDir(), FILE_NAME); 文件.delete();

【讨论】:

【参考方案3】:

没办法。即使您将输入流包装在某种包装器中以计算字节数(例如 apache 的 CountingInputStream),由于 JsonReader 的内部缓冲,结果也会不正确。我已经尝试了大约 300 字节长的 JSON。 CountingInputStream 报告每次读取约 4kb。

【讨论】:

gson中的JsonReader是不是需要显式关闭

】gson中的JsonReader是不是需要显式关闭【英文标题】:DoesJsonReaderingsonneedtobeexplicitlyclosedgson中的JsonReader是否需要显式关闭【发布时间】:2017-10-0223:04:22【问题描述】:从json文件读取时,我想使用gson执行此操作:JsonReaderreader=newJs... 查看详情

使用 GSON 的 JsonReader 流式传输 Json 文件时,您可以将对象转储为字符串吗?

】使用GSON的JsonReader流式传输Json文件时,您可以将对象转储为字符串吗?【英文标题】:WhenstreamingaJsonfilewithGSON\'sJsonReader,canyoudumpanobjecttostring?【发布时间】:2020-05-0614:31:13【问题描述】:我正在使用Java使用GSON库来处理一个巨... 查看详情

gson全解析之一:jsonreader的beginobject()

如果按重要性,对Gson中的类排个序,JsonReader绝对排在第一,它是底层真正解析json格式数据的支持类,非常值得一看。我们来看一个简单的解析。Stringjson="\\"name\\":\\"王成wisely\\",\\"age\\":\\&#... 查看详情

gson全解析之二:jsonreader的其它方法

上篇文章的示例代码Stringjson="\\"name\\":\\"王成wisely\\",\\"age\\":\\"24\\"";privatevoidreadJson2User()Useruser=newUser();StringReaderreader=newStringReader(j 查看详情

com.google.gson.stream.MalformedJsonException:使用 JsonReader.setLenient(true) 在将 Selenium Grid 节点注册到

】com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)在将SeleniumGrid节点注册到Hub时接受格式错误的JSON【英文标题】:com.google.gson.stream.MalformedJsonException:UseJsonReader.setLenient(true)toacceptmalformedJSONwhiler 查看详情

如何解决 MalformedJsonException:即使将 JsonReader 设置为 lenient 后仍存在的未终止对象

】如何解决MalformedJsonException:即使将JsonReader设置为lenient后仍存在的未终止对象【英文标题】:HowtoresolveMalformedJsonException:UnterminatedobjectthatexistevenaftersettingJsonReadertolenient【发布时间】:2019-05-1409:52:02【问题描述】:我正在尝试... 查看详情

如何在不知道 json 键的情况下使用 JsonReader 从 json 读取值

】如何在不知道json键的情况下使用JsonReader从json读取值【英文标题】:HowtoreadthevaluefromjsonusingJsonReaderwithoutknowingthejsonkey【发布时间】:2020-08-2418:53:11【问题描述】:我正在尝试使用TypedArray来解析json。我的json将如下:"id":"112233",... 查看详情

使用 JsonReader 读取动态 json 文件

】使用JsonReader读取动态json文件【英文标题】:UsingJsonReadertoreaddynamicjsonfiles【发布时间】:2015-03-0316:50:59【问题描述】:作为我正在创建的API的一部分,我允许配置规范(可以是任何存储格式,只有一种实现是使用Json)。作为... 查看详情

JsonReader 无法正确解析字符串数组

】JsonReader无法正确解析字符串数组【英文标题】:JsonReaderdon\'tparsecorrectlyStringArray【发布时间】:2018-03-1910:14:40【问题描述】:我正在使用来自gson的JsonReader,用于解析JSON,我的JSON解析适用于除此之外的所有值:"tags":["String1","S... 查看详情

无法从字符串转换为 NewtonSoft.Json.JsonReader

】无法从字符串转换为NewtonSoft.Json.JsonReader【英文标题】:CannotConvertFromStringtoNewtonSoft.Json.JsonReader【发布时间】:2021-10-0904:04:41【问题描述】:我是XamarinForms的新手,我正在尝试创建一个从API请求项目列表的方法。但是,由于错... 查看详情

从 JsonReader 读取 JObject 时出错。当前 JsonReader 项不是对象:StartArray。小路

】从JsonReader读取JObject时出错。当前JsonReader项不是对象:StartArray。小路【英文标题】:ErrorreadingJObjectfromJsonReader.CurrentJsonReaderitemisnotanobject:StartArray.Path【发布时间】:2016-04-1322:26:11【问题描述】:我正在开发一个涉及位置的Windo... 查看详情

我收到“java.lang.ClassNotFoundException:com.google.gson.Gson”错误,即使它是在我的类路径中定义的

】我收到“java.lang.ClassNotFoundException:com.google.gson.Gson”错误,即使它是在我的类路径中定义的【英文标题】:Iamgetting"java.lang.ClassNotFoundException:com.google.gson.Gson"erroreventhoughitisdefinedinmyclasspath【发布时间】:2011-06-2502:00: 查看详情

如何在 jqGrid 和 jsonReader 中使用主键

】如何在jqGrid和jsonReader中使用主键【英文标题】:howtouseprimarykeywithjqGridandjsonReader【发布时间】:2012-02-2717:46:40【问题描述】:我看过几篇帖子,但不明白如何使用jsonReader。我想在编辑、添加时隐藏我的主键。如果我将我的权... 查看详情

jqgrid jsonReader 配置

】jqgridjsonReader配置【英文标题】:jqgridjsonReaderconfiguration【发布时间】:2013-02-0709:54:58【问题描述】:我是jqgrid的新手,最后我设置了一个网格。假设我需要设置jsonReader以便网格知道在json返回中从哪里获取我的网格数据。但是... 查看详情

如何使用 JsonReader 跳过不需要的值?

】如何使用JsonReader跳过不需要的值?【英文标题】:HowcanIskipunwantedvaluesusingJsonReader?【发布时间】:2013-03-2016:36:29【问题描述】:我试图用JsonReader解析一个JSON文件。我使用skipvalue()函数转到下一个键,但解析器没有转到下一个... 查看详情

如何从 Codeanywhere 查看 PHP 错误日志?

】如何从Codeanywhere查看PHP错误日志?【英文标题】:HowcanIseethePHPerrorlogfromCodeanywhere?【发布时间】:2016-04-1308:06:55【问题描述】:我正在使用Codeanywhere与Phalcon合作,但由于我所做的一些更改,我收到了错误500。我的问题是我不知... 查看详情

使用 GSON 从 Json 文件中恢复数据

...是否应该像那样解析文件路径,但我似乎无法理解我应该如何使用ContentResolver。任何见解将不胜感激。publicvoidrestoreObjec 查看详情

处理来自 JsonReader 的空指针

】处理来自JsonReader的空指针【英文标题】:HandlingNullPointersfromJsonReader【发布时间】:2015-07-2214:31:41【问题描述】:我正在使用JsonReader从网站获取大量数据并保存到数据库。顺便说一句,只要阅读器没有找到对象项的值,它就会... 查看详情