Memory issues with InputStream in Java

后端 未结 4 1087
孤城傲影
孤城傲影 2021-01-21 19:31

I need to read a file into an array of Bytes.The entire file needs to be read into the array. The problem is I am getting an OutOfMemory Error since the file size is too large.

4条回答
  •  囚心锁ツ
    2021-01-21 20:12

    How about using a memory mapped file: FileChannel

    From http://www.java-tips.org/java-se-tips/java.nio/how-to-create-a-memory-mapped-file-3.html:

    try {
        File file = new File("filename");
    
        // Create a read-only memory-mapped file
        FileChannel roChannel = 
          new RandomAccessFile(file, "r").getChannel();
    
        ByteBuffer readonlybuffer = 
          roChannel.map(FileChannel.MapMode.READ_ONLY, 
    0, (int)roChannel.size());
    
        // Create a read-write memory-mapped file
        FileChannel rwChannel = 
          new RandomAccessFile(file, "rw").getChannel();
    
        ByteBuffer writeonlybuffer= 
          rwChannel.map(FileChannel.MapMode.READ_WRITE, 
      0, (int)rwChannel.size());
    
        // Create a private (copy-on-write) memory-mapped file.
        // Any write to this channel results in a private 
        // copy of the data.
        FileChannel pvChannel = 
          new RandomAccessFile(file, "rw").getChannel();
    
        ByteBuffer privatebuffer = 
          roChannel.map(FileChannel.MapMode.READ_WRITE, 
      0, (int)rwChannel.size());
    
    } catch (IOException e) {
    }
    

提交回复
热议问题