Java Scoket之java.io.EOFException解決方案

來源:互聯網
上載者:User

標籤:return   flush   too   發送   eee   bak   put   stat   padding   

Java Scoket之java.io.EOFException解決方案 Socket接收資料的時候,常常會拋出java.io.EOFException異常,也沒有明確的原因和提示,在網上搜搜,很多人都在問此問題,但是沒有找到切實可行的辦法。經過研究,問題解決了。 看到的異常堆棧資訊如下: java.io.EOFException
  at java.io.DataInputStream.readFully(DataInputStream.java:178)
  at java.io.DataInputStream.readUTF(DataInputStream.java:565)
  at java.io.DataInputStream.readUTF(DataInputStream.java:522) Java對此的解釋也很模糊:public class EOFExceptionextends IOException當輸入過程中意外到達檔案或流的末尾時,拋出此異常。    

此異常主要被資料輸入流用來表明到達流的末尾。注意,其他許多輸入操作返回一個特殊值表示到達流的末尾,而不是拋出異常。    
 從上面的提示可以模糊看到,因為不知道流的末尾,當到達末尾的時候,自然拋出了此異常。既然不知道結尾如何,乾脆設一個緩衝,然後讀取一批資料後輸出即可。為了保險期間,可以講此緩衝設定大點,一次可以完全接收到想要的內容,這樣,一次就可以讀取到所要的內容了,避免了迴圈擷取。下面將此代碼放出來:        ......

        private static final int BUFFER_SIZE=1024*1024;
        
        ......

        Socket socket = new Socket(cfg.getIp(), Integer.parseInt(SysParamsToolkit.getProperty("socketport")));
        String charset = SysParamsToolkit.getProperty("socke.rexml.charset");     //Socket發送的字元集編碼
        try {
                OutputStream dos = socket.getOutputStream();
                dos.write(xmlcmd.getBytes(charset));
                dos.flush();
                DataInputStream dis = new DataInputStream(socket.getInputStream());
                char[] data = new char[BUFFER_SIZE];
                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), charset));
                int len = br.read(data);
                String rexml = String.valueOf(data, 0, len);        //接收一個字串資料
        } catch (Exception e) {
                return false;
        } finally {
                if (socket.isConnected())
                        socket.close();
        }
        ......
 經過上面的處理後,就沒問題了。 緩衝的大小BUFFER_SIZE是根據你要接收內容的大小來確定。

Java Scoket之java.io.EOFException解決方案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.