2012-08-09 50 views
0

對不起,拖動了這個,但我有一個很好的看看,我仍然不斷得到一個EOFException。我甚至不嘗試致電readObject() -ObjectInputStream catch塊產生EOFException?

File receivedFileObject; 
    File newFile = new File("newlyWrittenFile.mp3"); 


    try{ 
     Socket socket = new Socket(SERVER_IP, PORT); 

     try{ 
     ObjectInputStream incommingData = new ObjectInputStream(socket.getInputStream()); 

所有我想要做的是通過從服務器到客戶端文件,TXT或MP3:我從評論的一切我的方法除了在ObjectInputStream,但我仍然得到EOFException?我怎樣才能達到我沒有嘗試閱讀的文件的末尾?實際上,我希望我試圖逐行閱讀一個文本文件,因爲我知道如何做到這一點非常好。我只是想獲得一個對象,它轉換爲一個文件,並將其寫入文件系統,但由於某種原因,我的catch塊:

 } catch (IOException e){ 
      System.out.println("Incomming data assignment error : " + e); 
     } 

打印出:

進來的數據分配錯誤:JAVA .io.EOFException

我一直在嘗試遵循this forum post中列出的服務器代碼。基本上,從服務器我用下面的線將文件寫入到客戶端:

 if (myFile.exists()) { 
     ObjectOutputStream oos=new ObjectOutputStream(client.getOutputStream()); 

     oos.writeObject(myFile); 
    } 

我會很感激,如果有人可以解釋如何解決是什麼感覺就像我的一個愚蠢的錯誤 - 在此先感謝!

+0

代碼在哪裏寫入ObjectOutputStream? – 2012-08-09 02:44:10

回答

2

ObjectOutputStream用於將java對象序列化爲流。你不想這樣做。

如果你想「通過文件」,這可能意味着要「通過內容的文件的」,所以才這樣:

FileOutputStream newFile = new FileOutputStream("newlyWrittenFile.mp3"); 
InputStream input = socket.getInputStream(); 
byte[] bytes = // pseudo code for reading all bytes from input 
newFile.write(bytes); // pseudo code for writing to file 
newFile.close(); 

您可能會發現Apache的共同-IO庫IOUtils類的方法很方便閱讀和輕鬆編寫數據

+0

感謝您的回覆,但我的最終目標是通過網絡實際播放mp3,而不是等待整個文件下載。我是否認爲流是一種正確的技術,只是我沒有太多的經驗而急於完成任務。 – 2012-08-09 02:57:03

+0

是使用流,但不*使用ObjectOutputStream。網上必須有1000個例子才能通過套接字發送字節 - 只需使用google。你基本上想把一個FileInputStream「泵」到一個套接字的OutputStream中。 Apache的IOUtils也可以這樣做。 – Bohemian 2012-08-09 13:01:28

+0

感謝您的時間:0 – 2012-08-09 13:33:38

0

如果檢查javadoc of ObjectInputStream

一個序列化流頭從流中讀取並驗證。

因此創建對象確實會觸發讀取。

+0

啊我看到了,這很有趣。那麼我能做些什麼來阻止它產生異常呢?如何在沒有這種情況發生的情況下如何將任何東西放在管道中? – 2012-08-09 03:04:40