UDPパケットを受信してデータをファイルに保存する小さなプログラムを作成しました。私はそれが次のコードを使用読みしようとしていますその後UDPパケットの長さが正しく書かれていない
MulticastSocket socket = getMulticastSocket(interfaceAddress, multicastAddress, port);
FileOutputStream fos = null;
try{
fos = new FileOutputStream(fileName);
while(true) {
byte[] data = new byte[BUFFER_SIZE];
byte[] lengthBytes = new byte[4];
DatagramPacket packet = new DatagramPacket(data, 0, data.length);
socket.receive(packet);
int length = packet.getLength();
ByteBuffer lengthBB = ByteBuffer.wrap(lengthBytes);
lengthBB.putInt(length);
fos.write(lengthBB.array());
fos.flush();
fos.write(data, 0, length);
fos.flush();
}
}
final FileInputStream inputStream = new FileInputStream(fileName);
byte[] length = new byte[4];
while (inputStream.read(length) != -1){
int receivedLength = ByteBuffer.wrap(length).getInt();
byte[] body = new byte[receivedLength];
inputStream.read(body);
// doing something with body
length = new byte[4];
}
それは一般的に動作しますが、ファイルの途中で、私はreceivedLength変数に負の値を持っている(-2147483648と[-128 、0、0、0])である。
BUFFER_SIZE = 10240しかし、私はこのパッケージがこの値よりも大きいとは思わない。
質問:なぜ起こったのですか?
p.s.ファイルが書き込まれたマシンへのアクセス権がなく、ネットワークストリームを見ることができません。私はファイルしか持っていません。
'read()'がバッファをいっぱいにしているとします。あなたは 'DataInputStream.readFully()'を使用していなければなりません。そして 'DataInpitStream.readInt()'。 – EJP
@EJP DataInputStreamを使用しようとしましたが、同じ結果が得られます。私は私の作家にいくつかの問題があると思います。残念ながら、私は問題が何であるか理解していません – ViKo