我有一个InputStreamReader对象。我想通过一个函数调用将多行读入缓冲区/数组(不包括大量的字符串对象)。有没有简单的方法来做到这一点?从InputStreamReader(JAVA)读取多行
回答
首先介意的是InputStreamReader
效率不高,你应该围绕BufferedReader
对象包装,以获得最佳性能。
综合考虑这一点,你可以做这样的事情:
public String readLines(InputStreamReader in)
{
BufferedReader br = new BufferedReader(in);
// you should estimate buffer size
StringBuffer sb = new StringBuffer(5000);
try
{
int linesPerRead = 100;
for (int i = 0; i < linesPerRead; ++i)
{
sb.append(br.readLine());
// placing newlines back because readLine() removes them
sb.append('\n');
}
}
catch (Exception e)
{
e.printStackTrace();
}
return sb.toString();
}
记住,readLine()
回报null
是EOF
达到,所以你应该检查并照顾它。
这个目标不是逐行读取,因为它用冗余的字符串对象填充我的堆并使GC变得疯狂。我想从inputstreamreader中读取(使用bufferedReader/whatever),而不创建许多String对象。也许直接读入一个缓冲区(不需要在中间创建一个字符串),或者读取多行以避免字符串垃圾... – amitlicht 2010-03-12 18:03:21
使用__RandomAccessFile__直接读取字节缓冲区有什么用处?整个文件(__readFull(byte [] b)__) – Jack 2010-03-12 18:42:23
字符串在JVM v。1.6中非常优化。你是否使用过一个探查器并且真的发现了一个问题?或者你只是猜测? – incarnate 2010-03-12 21:29:52
如果你有多行分隔符,你可以使用长度和偏移量的read方法读取很多字符。否则使用一个StringBuilder来追加BufferedReader读取的每一行应该对你没有太大的临时内存
- 1. 从InputStreamReader读取4个字节
- 2. java hadoop:FileReader VS InputStreamReader
- 3. Java - 替代InputStreamReader?
- 4. Java:将InputStreamReader读取为字符串 - 添加额外字符
- 5. 如何用Java的BufferedReader与InputStreamReader读取文件?
- 6. JAVA:使用InputStreamReader打开并读取文件
- 7. 从xml读取多行
- 8. 在Java中使用StringTokenizer读取多行
- 9. Java:从ObjectInputStream读取
- 10. Java从文件读取行样本
- 11. JAVA - 从特定行中读取excel
- 12. 从用户读取单行文本java
- 13. java nio从文件中读取行
- 14. 在java中从控制台读取多行
- 15. Java登录码从文件中读取多行不工作
- 16. Popen多行读取
- 17. BASH - 从文本文件读取多行
- 18. 从一行读取多条记录
- 19. 从文件中读取多行文件
- 20. 从同一行读取多个输入。
- 21. 无法从sqldatareader读取多行
- 22. 从文件中读取多行文件
- 23. 从多行读取数据PHP MySQL
- 24. 从shell中的多行变量读取
- 25. 从输入文件读取多行
- 26. C从文件读取多行文件
- 27. 使用getline从文件读取多行?
- 28. Java - 使用InputStream读取行
- 29. Java串行读取器
- 30. Java - 随机行读取
是你想读的固定或变化的行数? – Jason 2010-03-12 17:33:22
固定,比如每行读取100行 – amitlicht 2010-03-12 17:34:38
行是固定长度的吗? – 2010-03-12 17:44:55