我有一個函數,在該函數中只給出一個BufferedInputStream,並且沒有關於要讀取的文件的其他信息。不幸的是,我不能改變方法定義,因爲它被我無法訪問的代碼調用。我一直在使用下面的代碼來讀取文件並將其內容的字符串:Java文件使用BufferedInputStream讀取大文件時截斷的IO
public String[] doImport(BufferedInputStream stream) throws IOException, PersistenceException {
int bytesAvail = stream.available();
byte[] bytesRead = new byte[bytesAvail];
stream.read(bytesRead);
stream.close();
String fileContents = new String(bytesRead);
//more code here working with fileContents
}
我的問題是,對於大文件(> 2GB),該代碼會導致程序運行要麼極爲緩慢或截斷數據,取決於程序在其上執行的計算機。有沒有人有關於如何在這種情況下處理大文件的建議?
*我*「不確定你爲什麼認爲」每個文件都有行。他們不。也很難理解爲什麼你認爲每個文件都有字符。他們不。從一個文件中讀取一行,可能有或沒有一個或多個文件,並不能解決實際問題。 -1。 – EJP 2013-05-01 10:15:08
原始問題已修改。最初,海報表明他們傾向於逐行讀取文件,因此我假設輸入是帶有換行符的字符流。 http://stackoverflow.com/posts/16311485/revisions – Jacob 2013-05-01 15:14:13