我想在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)
答案 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 () );
确保您的文件不是太大。