我正在創建一個TFTP服務器。我已經把它轉換成了文件,但是大多數文件在到達另一端時不會打開。這是因爲ArrayList im的輸出用於存儲接收到的每個數據包中的文件字節,從而將一系列字節添加到文件的開頭。例如。 「¬ísrjava.util.ArrayListxÒ™ÇaI sizexp w ur [B¬óøTàxpü!」。首先使用列表的原因是創建的服務器無法告訴正在接收的文件的文件大小。因此,據我所知,我不能使用一個字節[],因爲這需要使用設定的長度進行初始化。這有什麼辦法嗎?ArrayList和文件傳輸的問題
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();
代碼請。看起來你只是(默認)將'ArrayList'序列化爲一個文件。 – esej
您究竟是如何編寫數據的?使用writeObject序列化ArrayList?必須寫入字節而不是數組列表。 –
您是否已驗證服務器在其「ArrayList」中具有正確的字節?如果是這樣,你可能只需要改變你用來寫入目標文件的方法。 – 101100