我有這個簡單的服務器/客戶端應用程序。我試圖讓服務器通過OutputStream(FileOutputStream,OutputStream,ObjectOutputStream等)發送文件,並在將其保存到實際文件之前在客戶端接收它。問題是,我試過這樣做,但它一直在失敗。每當我創建文件並將從服務器收到的對象寫入它時,我都會看到一張破損的圖像(我只是將它保存爲jpg,但這不重要)。下面是代碼的這是最有可能發生故障(所有你看到這裏已經事先聲明看似未聲明的對象)的部分:通過ObjectOutputStream發送文件,然後將其保存在Java中?
服務器:
ObjectOutputStream outToClient = new ObjectOutputStream(
connSocket.getOutputStream());
File imgFile = new File(dir + children[0]);
outToClient.writeObject(imgFile);
outToClient.flush();
客戶:
ObjectInputStream inFromServer = new ObjectInputStream(
clientSocket.getInputStream());
ObjectOutputStream saveImage = new ObjectOutputStream(
new FileOutputStream("D:/ServerMapCopy/gday.jpg"));
saveImage.writeObject(inFromServer.readObject());
所以,我的問題是我無法正確地通過流獲取對象,沒有得到一個破損的文件。
我知道我錯過了一個步驟。我想我必須在發送文件之前做一些事情,因爲該文件對象不完整。 – ZimZim 2012-07-21 16:14:55
雖然採用這種方法,但在將字節寫入套接字之前,您會將整個文件讀入內存。 – sarcan 2012-07-21 16:17:07
@sarcan爲簡潔起見,我使用了'Files.read' /'Files.write'方法。 OP可以總是使用一個循環來遞增地寫字節 – Jeffrey 2012-07-21 16:25:36