标签: bufferedreader

java.io.IOException:BufferedInputStream在Android 2.3中关闭

以下代码在Android 1.5-2.2.1中运行良好,但它不在2.3及更高版本中.

BufferedReader rd;
rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));

StringBuffer sb = new StringBuffer();
String line;
while ((line = rd.readLine()) != null){
    sb.append(line);
}
rd.close();
Run Code Online (Sandbox Code Playgroud)

stracktrace:

01-30 08:21:42.668: WARN/System.err(594): java.io.IOException: BufferedInputStream is closed
01-30 08:21:42.668: WARN/System.err(594):     at java.io.BufferedInputStream.streamClosed(BufferedInputStream.java:116)
01-30 08:21:42.728: WARN/System.err(594):     at java.io.BufferedInputStream.read(BufferedInputStream.java:274)
01-30 08:21:42.728: WARN/System.err(594):     at org.apache.harmony.luni.internal.net.www.protocol.http.UnknownLengthHttpInputStream.read(UnknownLengthHttpInputStream.java:40)
01-30 08:21:42.758: WARN/System.err(594):     at java.io.InputStreamReader.read(InputStreamReader.java:255)
01-30 08:21:42.758: WARN/System.err(594):     at java.io.BufferedReader.fillBuf(BufferedReader.java:128)
01-30 08:21:42.758: WARN/System.err(594):     at java.io.BufferedReader.readLine(BufferedReader.java:357)
Run Code Online (Sandbox Code Playgroud)

这是一个问题吗?2.3中有什么变化吗?

android http bufferedreader

5
推荐指数
1
解决办法
1万
查看次数

使用缓冲读取器读取大型 .csv 文件,Python

我正在尝试在 python 脚本中打开大型 .csv 文件(16k 行+,~15 列),但遇到了一些问题。

我使用内置的 open() 函数打开文件,然后使用输入文件声明一个 csv.DictReader 。循环的结构如下:

for (i, row) in enumerate(reader):
     # do stuff (send serial packet, read response)
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用的文件长度超过 20 行,该文件将打开,但在几次迭代后我会收到 ValueError: I/O 操作已关闭的文件。

我的想法是,我可能会耗尽内存(尽管 16k 行文件只有 8MB,而且我有 3GB 内存),在这种情况下,我希望我需要使用某种缓冲区来仅加载一次将文件存入内存。

我走在正确的轨道上吗?或者是否还有其他原因导致文件意外关闭?

编辑:大约有一半的时间我使用 11 行的 csv 运行此命令,它会给出 ValueError。错误并不总是发生在同一行

python csv enumerate bufferedreader

5
推荐指数
1
解决办法
9738
查看次数

Readline太慢 - 什么更快?

我正在使用BufferedReader和InputStreamReader从流读入来创建一个从读者创建的长字符串.它最多可达100,000行,然后抛出500错误(服务器上的调用失败).我不确定是什么问题,有什么比这个方法更快?它的工作线路数千,但我正在使用大型数据集.

BufferedReader in = new BufferedReader(new InputStreamReader(newConnect.getInputStream()));
String inputLine;               
String xmlObject = "";
StringBuffer str = new StringBuffer();

while ((inputLine = in.readLine()) != null) {
    str.append(inputLine);
    str.toString();
}       
in.close();
Run Code Online (Sandbox Code Playgroud)

提前致谢

java xml servlets bufferedreader inputstreamreader

5
推荐指数
1
解决办法
6831
查看次数

BufferedReader:确定读取的行的字节偏移量

我正在使用 BufferedReader 逐行读取字节流(UTF-8 文本)。出于特定原因,我需要知道该行在字节流中的确切位置开始。

问题:我无法使用插入 BufferedReader 的 InputStream 的位置 - 同样 - 读取器缓冲并一次读取超过一行。

我的问题:如何确定读取的每行的精确字节偏移量?

一种明显(但不正确)的解决方案是使用 (line + "\n").getBytes("UTF-8").length。这种方法有两个问题:1)仅计算字节数,将字符串转换回字节是相当大的开销,2)换行符并不总是标记为“\n” - 它也可能是“\ r\n”等

对此还有其他解决方案吗?

编辑:到目前为止我见过的每个类似 LineReader 的类似乎都是缓冲的。有谁知道类似无缓冲的 LineReader 类吗?

java utf-8 bufferedreader

5
推荐指数
1
解决办法
1999
查看次数

你怎么能让BufferedReader.readLine()不挂?

有没有办法让你BufferedReader.readLine()不挂?

我正在创建一个服务器:

  • 检查客户端是否已提供任何输入.
  • 如果没有,它会执行其他代码并最终循环回检查客户端的输入.

如何在不运行的情况下检查客户端是否已提供任何输入readLine()?如果我运行readLine(),线程将挂起,直到输入传递?

java bufferedreader

5
推荐指数
1
解决办法
1万
查看次数

用于从压缩文本文件中获取文本行的阅读器

摘要:有了contains的字节图像,我怎样才能获得一个干净且正确的读取器来返回文本文件的行?a.zipa.txt

我确实将 zip 文件的图像从 Web 服务下载到byte[] content. 我想写一个类似的方法

private BufferedReader contentToBufferedReader(byte[] content)
Run Code Online (Sandbox Code Playgroud)

这将返回一个可以像这样使用的读者

reader = contentToBufferedReader(content);
while ((line = reader.readLine()) != null) {
    processThe(line);
}
reader.close()
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经(更新

private BufferedReader contentToBufferedReader(byte[] content) {

    ByteArrayInputStream bais = new ByteArrayInputStream(content);
    ZipInputStream zipStream = new ZipInputStream(bais);
    BufferedReader reader = null;

    try {
        ZipEntry entry = zipStream.getNextEntry();

        // I need only the first (and the only) entry from the zip file.
        if (entry != null) { …
Run Code Online (Sandbox Code Playgroud)

java zip android inputstream bufferedreader

5
推荐指数
1
解决办法
7713
查看次数

为什么我的字符串返回“ \ ufffd \ ufffdN am e”

这是我的方法

public void readFile3()throws IOException
{
    try
    {
        FileReader fr = new FileReader(Path3);
        BufferedReader br = new BufferedReader(fr);
        String s = br.readLine();
        int a =1;
        while( a != 2)
        {
            s = br.readLine();
            a ++; 

        }
        Storage.add(s);

        br.close();

    }
    catch(IOException e)
    {
        System.out.println(e.getMessage());
    }
}
Run Code Online (Sandbox Code Playgroud)

由于某些原因,我无法读取仅包含以下文件:“名称为Intel(R)Core(TM)i5-2500 CPU @ 3.30GHz”

当我调试代码时,String s返回为“ \ ufffd \ ufffdN am e”,我不知道这些多余字符来自何处。.这使我无法正确读取文件。

java filereader bufferedreader

5
推荐指数
1
解决办法
2万
查看次数

如何从 InputStream 读取一行而不缓冲输入?

我有一个输入流,其中包含一行字符串,然后是二进制数据。

如果我使用 读取该行new BufferedReader(new InputStreamReader(inputStream)),则二进制数据也会被读取并且无法重新读取。

如何在不读取二进制数据的情况下读取一行?

java inputstream bufferedreader

5
推荐指数
1
解决办法
3088
查看次数

BufferedReader如何从S3读取文件?

我在AWS S3中有一个非常大的文件(几GB),我只需要文件中的少量行满足一定的条件.我不想将整个文件加载到内存中,然后搜索并打印这几行 - 这个内存负载太高了.正确的方法是只加载内存中需要的那些行.

根据AWS文档从文件中读取:

fullObject = s3Client.getObject(new GetObjectRequest(bucketName, key));
 displayTextInputStream(fullObject.getObjectContent());

private static void displayTextInputStream(InputStream input) throws IOException {
    // Read the text input stream one line at a time and display each line.
    BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    String line = null;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

这里我们使用BufferedReader.我不清楚这里发生了什么.

我们每次读取新行时是否对S3进行网络调用,并且只将当前行保留在缓冲区中?或者是整个文件加载到内存中,然后由BufferedReader逐行读取?或者介于两者之间?

java inputstream bufferedinputstream amazon-s3 bufferedreader

5
推荐指数
1
解决办法
2123
查看次数

OutOfMemoryError读取具有大行的174 Mb文本文件

我有12000行的csv文件。每行都有几个用双引号引起来并用逗号分隔的字段。此字段之一是xml文档,因此该行可能很长。文件大小为174 Mb。

这是文件的示例:

"100000","field1","field30","<root><data>Hello I have a
line break</data></root>","field31"
"100001","field1","field30","<root><data>Hello I have multiple
line 
break</data></root>","field31"
Run Code Online (Sandbox Code Playgroud)

此文件的问题在xml字段内,该字段可能具有一个或多个换行符,因此可能会中断解析。此处的目标是读取整个文件并应用正则表达式,它将用空字符串替换双引号内的所有换行符。

以下代码给了我OutOfMemoryError:

    String path = "path/to/file.csv";

    try {
        byte[] content = Files.readAllBytes(Paths.get(path));
    }
    catch (Exception e) {
        e.printStackTrace();
        System.exit(1);
    }
Run Code Online (Sandbox Code Playgroud)

我还尝试使用BufferedReader和StringBuilder读取文件,在第5000行附近出现OutOfMemoryError:

String path = "path/to/file.csv";

    try {
        StringBuilder sb = new StringBuilder();
        BufferedReader br = new BufferedReader(new FileReader(path));
        String line;
        int count = 0;
        while ((line = br.readLine()) != null) {
            sb.append(line);
            System.out.println("Read " + count++);
        }
    }
    catch (Exception e) {
        e.printStackTrace(); …
Run Code Online (Sandbox Code Playgroud)

java file bufferedreader

5
推荐指数
1
解决办法
130
查看次数