我正在编写一个Java程序,用一个或多个具有不同数量的测试数据包对二进制文件进行后处理 数据。我用BufferedReader对象解析二进制文件。由于我的程序的目的是更新数据包 大小,我解析数据包直到我到达数据包标题“测试”指示的下一个数据包。
我的程序在我的Windows 7 PC上工作正常,但由于某种原因它在我的Linux机器上不起作用。事实并非如此 正确查找和读取数据包数据的方式与我的PC相同,但我不确定原因。
我试过了两个:
private final int PACKET_DATA_SIZE = 4;
char[] packetData = new char[PACKET_DATA_SIZE];
while( !tempString.equals("Test") ) {
read(br, packetData, PACKET_DATA_SIZE);
tempString = new String(packetData);
if ( currentLocation >= fileSize ) {
break;
}
}
和
while( currentLocation < fileSize ) {
read(br, packetData, PACKET_DATA_SIZE);
if (packetData[0] == 'T' && packetData[1] == 'e' && packetData[2] == 's' && packetData[3] == 't') {
break;
}
}
两者都使用我的阅读功能:
public void read(BufferedReader br, char[] cbuf, int length) {
try {
br.read(cbuf, 0, length);
} catch(IOException e) {
e.printStackTrace();
}
currentLocation += length;
}
两者都可以在Win7上正常工作,但是再次,不在我的Linux机器上。 Linux如何/为何解释字符 原始二进制文件与Windows不同?两个二进制文件的写入方式与字节的字节完全相同。谢谢
答案 0 :(得分:4)
从字符输入流中读取文字
正文!不是二元的!
例如,使用BufferedInputStream
代替。
或者全力以赴java.nio并使用FileChannel
and map your file in memory(并查看ByteBuffer提供的内容 - 例如,您有一个.asCharBuffer()
来阅读{ {1}} s,你也可以改变字节顺序)
答案 1 :(得分:2)
BufferedReader读取二进制文件
停在那儿。问题中有三个字,这是错误的。读者是用于文本文件。不要在任何你不知道是文本的东西上使用它们。