在Java中将二进制文件读入ArrayList

时间:2015-02-24 10:02:56

标签: java file-io buffer binaryfiles java-io

我想在java中读取二进制文件。我有153(1.bin,2.bin ... 153.bin)bin文件。我必须读到这一点。我认为我必须使用ArrayList进行缓冲。但我不能这样做。我怎样才能做到这一点 ?

经过一些研究,我在这个标题中找到了这种方式(Reading a binary input stream into a single byte array in Java)。这个标题中有如下代码。

    StringBuilder sb = new StringBuilder();
    String fileName  = "/path/10.bin";
    byte[] buffer;

    try {

        buffer = Files.readAllBytes(Paths.get(fileName));

        for(byte b : buffer){

            sb.append(String.format("%02X ", b));
        }
        System.out.println(sb.toString());

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

这是我的问题的真实方式还是我必须使用Arraylist进行缓冲?如果我使用单字节数组进行缓冲,是否必须清除其他二进制文件的缓冲区。

编辑:153单位表示153文件(1.bin,2.bin ... 153.bin)

3 个答案:

答案 0 :(得分:1)

你的问题不清楚。首先,你不能告诉那些"单位"是,它们有多长等等。其次,您的所有代码都是以十六进制转储文件的内容。

我建议您在这里做的是将文件映射到内存中并使用类来包装它,并使其实现Closeable

请参阅FileChannel.open()FileChannel.map()。但请注意,在内存中映射多于1 GiB是不安全的。这不是真实的" mmap()

答案 1 :(得分:1)

我假设一个单位是一个字节。这是对的吗?

ArrayList不适合字节缓冲。它是一个实现List接口的数组的包装类(通过它定义了大部分功能。)

http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

如果您只想从文件中读取字节,可以使用FileInputStream。

http://docs.oracle.com/javase/tutorial/essential/io/bytestreams.html

这是一个简单的例子,它从包含“hello world!”的文件中读取输入。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Input {
public static void main(String[] args) throws FileNotFoundException, IOException {
    try (FileInputStream in = new FileInputStream("test.txt")) {
        int c;
        while ( (c = in.read()) != -1 )
            System.out.print((byte)c + " ");
    }
}
}

以字节为单位的输出:104 101 108 108 111 32 119 111 114 108 100 33 13 10

答案 2 :(得分:0)

我不确定你所说的“单位”是什么意思。字节数据的读取方式如下:

File f = new File ("File.txt");
FileInputStream fis = new FileInputStream (f);
byte[] bytes = new byte[(int) f.length ()];
fis.read (bytes, 0, (int) f.length () );

确保您的文件不是太大。