さまざまな量のデータを含む 1 つ以上のテスト パケットを含むバイナリ ファイルを後処理する Java プログラムを作成しています。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 とは異なる方法で解釈するのはなぜですか? 両方のバイナリ ファイルは、まったく同じ方法でバイトごとに書き込まれます。ありがとうございました