Java 如何对大文件的整个字节运行方法
我的程序需要对文件的整个字节进行计算,当文件超过一定大小时,它就会中断Java 如何对大文件的整个字节运行方法,java,bytearray,inputstream,out-of-memory,Java,Bytearray,Inputstream,Out Of Memory,我的程序需要对文件的整个字节进行计算,当文件超过一定大小时,它就会中断 线程“main”java.lang.OutOfMemoryError中出现异常:java堆空间 我知道我可以使用命令行开关为我的程序分配内存量,但我想知道在我的程序中是否有更有效的方法来处理这个问题 我基本上是想找出一种方法,以块的形式读取文件,并将这些块传递给另一个方法,然后用该方法重建文件 这就是问题的解决方法。我需要在另一个方法中使用这些字节 此方法将流转换为字节数组: private byte[] inputStre
线程“main”java.lang.OutOfMemoryError中出现异常:java堆空间
我知道我可以使用命令行开关为我的程序分配内存量,但我想知道在我的程序中是否有更有效的方法来处理这个问题
我基本上是想找出一种方法,以块的形式读取文件,并将这些块传递给另一个方法,然后用该方法重建文件
这就是问题的解决方法。我需要在另一个方法中使用这些字节
此方法将流转换为字节数组:
private byte[] inputStreamToByteArray(InputStream inputStream) {
BufferedInputStream bis = null;
ByteArrayOutputStream baos = null;
try {
bis = new BufferedInputStream(inputStream);
baos = new ByteArrayOutputStream(bis);
byte[] buffer = new byte[1024];
int nRead;
while((nRead = bis.read(buffer)) != -1) {
baos.write(buffer, 0, nRead);
}
} catch(IOException ioe) {
ioe.printStackTrace();
}
return baos.toByteArray();
}
此方法检查文件类型:
private final boolean isMyFileType(byte[] bytes) {
// do stuff
return theBoolean;
}
它被破坏的原因对我来说是有意义的——如果我有一个巨大的文件,并且我正在传递一个巨大的字节数组,那么字节数组最终将是巨大的
我的目标是,从文件中读取字节,使用我编写的另一种方法确定文件的类型,在确定文件类型后对这些字节运行压缩/解压缩方法
我已经完成了我的大部分目标,我只是不知道如何有效地处理文件流和大字节数组 您已经在使用BufferedInputStream。使用“标记”方法在蒸汽中做标记。确保“mark”的“readlimit”参数足够大,可以检测文件类型。从流中读取前X字节(但不超过readlimit),并尝试找出内容。然后调用reset()将流设置回起始位置,并继续执行您想对流执行的任何操作。您需要将该方法更改为一次只处理一个块。@SLaks我该怎么做?基本上,如果您需要内存中的整个字节数组(不确定是否确实需要,这取决于您对该字节数组的处理方式),我认为除了增加JVM的可用内存之外,没有其他事情可做。@mael我正在压缩和解压缩文件。。。我想我需要把整个文件都存储在内存中,但我是个傻瓜,不知道该怎么做。压缩和解压缩我帮不了你,我对这个问题一无所知。但我不确定压缩工具是否通常会将整个文件加载到内存中。