我有一個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