2

我正在编写一个 Java 程序来对包含 1 个或多个具有不同数据量的测试数据包的二进制文件进行后处理。我使用 BufferedReader 对象解析二进制文件。由于我的程序的目的是更新数据包大小,因此我解析数据包,直到到达数据包标头“Test”指示的下一个数据包。

我的程序在我的 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 不同?两个二进制文件都以完全相同的方式逐字节写入。谢谢

4

2 回答 2

4

javadocBufferedReader说:

字符输入流中读取文本

文本!不是二进制!

例如,使用 aBufferedInputStream代替。

或者完全访问 java.nio 并使用 aFileChannel并将您的文件映射到内存中(并查看ByteBuffer必须提供的功能——例如,您有 a .asCharBuffer()to read chars 并且您也可以更改字节顺序)

于 2013-06-14T18:44:51.670 回答
2

BufferedReader 读取二进制文件

停在那儿。三个字进入问题,这已经是错误的。阅读器适用于文本文件。不要将它们用于您不知道是文本的任何内容。

于 2013-06-15T01:18:38.287 回答