当前位置: 首页 > 知识库问答 >
问题:

BufferedReader出现问题。从InputStream读取时读取

云骏奇
2023-03-14

我试图分块读取输入流并写入文件以避免内存问题,我接收json格式的数据,并使用以下代码写入文件。

BufferedReader rd =
    new BufferedReader(new InputStreamReader(conn.getInputStream()));
    BufferedWriter writer = null;
    if(getOutputFormat().equals(Constants.URI_FORMAT_JSON)){

    boolean enableAppend = true;
    CharBuffer buffer = CharBuffer.allocate(1024);
    writer = new BufferedWriter(new      FileWriter(request.getJsonFile(isNewFile),enableAppend));
    int readState = 0;
    while ((readState = rd.read(buffer)) != -1) {
        buffer.flip();

        if(isNewFile){
            writer.write(buffer.toString());
            isNewFile = false;
        }else {
            writer.append(buffer.toString());
        }
        buffer.clear();
    }

    writer.newLine();
    writer.flush();
    writer.close(); 
}

我的问题是,大多数json都写得很好,虽然其中一些包含损坏的数据,但我不确定我是否正确地将CharBuffer与BufferedReader一起使用,我观察到的另一件事是,对于少量数据,它正确地将CharBuffer写入文件,当我从服务器接收到更大的数据(大约2MB的输入流-不是很大)时,我通常会遇到这种情况。还使用readLine方法进行了验证,该方法运行良好,但我希望以块的形式读取数据,因此使用CharBuffer,知道吗?

共有1个答案

丁嘉
2023-03-14

调试时发现“连接重置”发生在中间,因此数据丢失。已处理异常以对同一请求进行受控重试,问题已得到解决。希望对某人有所帮助。

 类似资料:
  • 当我运行这段代码并且调用图确实很大时,程序会打印到输出的最后一行,并在处被阻塞,尽管没有任何剩余内容。有人知道问题出在哪里吗?将调用图发送到错误流。我尝试执行,这样我就可以从文件中读取,但它抱怨有太多的位置参数。 奇怪的是,对于小尺寸的调用图,代码运行得很好。

  • 问题内容: 不幸的是raw_input并没有做我需要做的事。我想做的就是获取totPrimes =我在提示符下键入的任何内容。如果我用此脚本替换工作。如果在提示中输入50,则此脚本无效,恐怕raw_input不是我要使用的函数吗?这是我的代码片段: 问题答案: 做 给您一个字符串,您必须先将其转换为整数或浮点数,然后再进行数字比较。

  • 我正在实现一个从s3获取文件、读取并删除它的路由。问题是删除后继续搜索文件并进入错误,我不明白为什么路由不停止。 这是我的

  • 问题内容: 在 Android平台上从InputStream读取时,我遇到一个奇怪的问题。我不确定这是否是Android特有的问题,或者 总体上我做错了什么。 唯一特定于Android的是此调用: 这会从Android资产返回文件的InputStream。无论如何, 这是我遇到的问题: 当read()执行时,它抛出IOException。奇怪的是, 如果我进行了两个连续的单字节读取(或任意数量的单

  • 在解决黑客级别的一个问题时,我面临着扫描器/Bufferedreader无法读取最后一个问题。因为它们提供的输入就像 因此,两个扫描器/BufferedReader都无法读取最后一行。如果输入类似,那么代码似乎可以正常工作。 (输入结束) 下面是我正在使用的示例代码。我知道我们需要在行的末尾有一个\r或\n来从scanner/bufferedreader读取行。但是任何人都可以提供解决这个问题的方

  • 我正在从弹性搜索中读取数据。当我在kibana上可视化日期格式时,它显示日期8月5,2020 @ 23:00:00.000 = 我用pyspark将索引的内容收集到一个数据帧中,如果有任何解决方案,我可以在scala中完成 'from elasticsearch import Elasticsearch from pandasticsearch import Select es = Elastic