Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java IO在内存中将内容大小为GBs的文件作为字符串读取?_Java_Java Io - Fatal编程技术网

如何使用Java IO在内存中将内容大小为GBs的文件作为字符串读取?

如何使用Java IO在内存中将内容大小为GBs的文件作为字符串读取?,java,java-io,Java,Java Io,我有一个文件包含一个很长的连续字符串,没有换行符。我需要将此文件作为字符串高效地读入内存 我知道所有的内容不可能一次存储到内存中,而不会出现OutOfMemoryError。但是,我需要读取该文件,将内容转换为字符串,并通过将其转换为字符数组对该字符串进行一些处理 我需要了解一些实现此目标的有效方法。尝试使用文件流,以便部分读取文件并对其进行处理 try{ FileInputStream inputStream = new FileInputStream(path); byte[]

我有一个文件包含一个很长的连续字符串,没有换行符。我需要将此文件作为字符串高效地读入内存

我知道所有的内容不可能一次存储到内存中,而不会出现OutOfMemoryError。但是,我需要读取该文件,将内容转换为字符串,并通过将其转换为字符数组对该字符串进行一些处理


我需要了解一些实现此目标的有效方法。

尝试使用文件流,以便部分读取文件并对其进行处理

try{
   FileInputStream inputStream = new FileInputStream(path);
   byte[] data = new byte[1024];
   while(inputStream.read(data) != -1){
      processData(new String(data));
   }
}catch(IOException e){
   e.printstacktrace();
}

如果需要将整个文件放在
char
数组中,那么只要文件大小大于可用内存量(可能更早,这是因为Java中字符串在内存中的表示方式)。因此,如果文件大小任意大,那么不,这里没有作弊的方法,你必须找到一种方法,将文件分块处理。你所描述的是不可能的。您可能能够以更小的字符串块处理它。但是您不能将整个文件内容表示为单个
字符串
,因为它会耗尽内存。在我整个20年的java生涯中,我从未见过一个文件问题,如果不将整个文件保存在内存中,就无法解决。如果您提供示例并详细说明为什么必须在内存中读取整个文件,那么我们可以提供替代方案。如果没有这些,答案是否定的——你不可能做到这一点而不遇到麻烦。我奇怪地想起(最近重新发布的)将此标记为重复的1。这会读取任意大的数据块,并尝试将其转换为
字符串。当数据采用的编码每字符使用超过1字节时(即使只是偶尔),此操作将失败。2.即使您没有遇到这种情况,处理任意大小的块也是很困难的。3.这使用平台默认编码,而不是显式指定编码,这几乎总是一个错误。4.如果您想阅读文本,请将您的
InputStream
包装在
InputStreamReader
中,因为这是实现此目的的预期方法,并且还修复了问题1的副作用。虽然这通常是一个很好的建议,但它无法解决OP提出的问题。至少不是以目前的特定方式。事实上,行动计划的问题目前可能无法解决。因此,任何答案都可能不符合中定义的标准。