我有一个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. Java:从InputStreamReader中获取InputStream
- 2. 从InputStreamReader读取4个字节
- 3. 从控制台读取Java多行
- 4. Android java InputStreamReader
- 5. Java - 替代InputStreamReader?
- 6. java hadoop:FileReader VS InputStreamReader
- 7. Java:将InputStreamReader读取为字符串 - 添加额外字符
- 8. 如何用Java的BufferedReader与InputStreamReader读取文件?
- 9. JAVA:使用InputStreamReader打开并读取文件
- 10. 从std :: cin读取多行
- 11. 从FileReader中读取多行
- 12. 从TCP流读取多行
- 13. 从xml读取多行
- 14. Java InputStreamReader错误(org.apache.poi.openxml4j.exceptions.InvalidOperationException)
- 15. InputStreamReader读取13和10进行回车。为什么?
- 16. java从InputStream创建InputStreamReader对象
- 17. 在Java中使用StringTokenizer读取多行
- 18. 从Java中的多个进程读取
- 19. JAVA从文件读取多张图片
- 20. Java:从ObjectInputStream读取
- 21. 从java文件中逐行读取
- 22. 从用户读取单行文本java
- 23. java nio从文件中读取行
- 24. Java从控制台读取整数行
- 25. Java从文件读取行样本
- 26. java故障从文件读取行
- 27. JAVA - 从特定行中读取excel
- 28. Java从串行端口读取数据
- 29. 从文本文件Java中读取行?
- 30. Java中的BufferedReader和InputStreamReader
是你想读的固定或变化的行数? – Jason 2010-03-12 17:33:22
固定,比如每行读取100行 – amitlicht 2010-03-12 17:34:38
行是固定长度的吗? – 2010-03-12 17:44:55