TFTP サーバーを作成しています。ファイルを正常に転送できましたが、ほとんどのファイルは相手側に到着しても開かれません。これは、受信したすべてのパケットからのファイル バイトを格納するために使用する ArrayList im の出力が、ファイルの先頭にバイトの負荷を追加するためです。例えば。"¬í sr java.util.ArrayListxÒ™Ça I sizeexp w ur [B¬óøTà xp ü!". そもそも List を使用する理由は、作成中のサーバーが、受信中のファイルのファイル サイズを知る方法がないためです。したがって、私が知る限り、これは設定された長さで初期化する必要があるため、byte[] を使用することはできません。これを回避する方法はありますか?
WRQ WRQ = new WRQ();
ACK ACK = new ACK();
DatagramPacket outPacket;
byte[] bytes;
byte[] fileOut;
List fileBytes = new ArrayList();
outPacket = WRQ.firstPacket(packet);
socket.send(outPacket);
socket.receive(packet);
while (packet.getLength() == 516){
bytes = WRQ.doWRQ(packet);
fileBytes.add(bytes);
outPacket = ACK.doACK(packet);
socket.send(outPacket);
socket.receive(packet);
}
bytes = WRQ.doWRQ(packet);
fileBytes.add(bytes);
outPacket = ACK.doACK(packet);
socket.send(outPacket);
ObjectOutputStream os;
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(5000);
os = new ObjectOutputStream(new BufferedOutputStream(byteStream));
os.flush();
os.writeObject(fileBytes);
os.flush();
byte[] outFile = byteStream.toByteArray();
os.close();
FileOutputStream foStream = new FileOutputStream(filename);
foStream.write(outFile);
foStream.close();