Using Java 7 API to read a file byte by byte

2019-02-20 14:10发布

I have a 2 gb file I want to read in Java (actually four 2gb files). And so there's a new feature in Java 7 that can let me read all the bytes at once.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class reconstructor {

    public static void main(String[] args) throws IOException {

        Path p = Paths.get("test.txt");     
        for (int i = 0; i < 1; i++) {
            byte[] b = Files.readAllBytes(p);
            Files.write(p, b, StandardOpenOption.APPEND);
        }

    }

}

This is a dumb program that wil read a file with a single byte pre entered in it and continuously read that file and append what it read back onto the same file. Now obviously, the RAM is not big enough to read a 2gb file at one time, let alone four of them, so I was wondering if there was any quick way, without using external libraries (unless that is the only way) to read four files byte by byte so that the RAM does not get overloaded (otherwise I end up with a Java heap error).

2条回答
再贱就再见
2楼-- · 2019-02-20 14:50

Try Memory Mapped I/O, the last example in this tutorial: http://www.polarsparc.com/pdf/MemoryMappedIOinJava.pdf

查看更多
爷、活的狠高调
3楼-- · 2019-02-20 14:59

Reading byte by byte is the other extreme solution, and will be very inefficient. You should simply use a BufferedInputStream, and read the bytes chunk by chunk.

Read the Java IO tutorial about byte streams.

查看更多
登录 后发表回答