我有一个函数,在该函数中只给出一个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