Java中對於位元組流的讀取方式

2021-09-02 03:11:35 字數 1177 閱讀 3692

今天我想介紹一下socket中位元組流的讀取方式,避免在socket讀取過程中發生的斷包問題。

1.設計位元組傳送的方式

在位元組流的讀寫過程中,需要先傳送乙個代表傳送內容長度的位元組,然後再傳送內容,在接收端先接受傳送端傳送的內容長度,再根據長度來讀取相應的內容。

2.構建位元組流的讀寫類

bufferedinputstream in = new bufferedinputstream(socket.getinputstream());

bufferedoutputstream out = new bufferedoutputstream(socket.getoutputstream());

3.傳送端的傳送方式

out.write(numberutil.inttobyte(data.length));// numberutil類是把int和位元組轉換的類,在附件中附送

out.write(data);

out.flush();

4.接收端的接收方式

protected byte read() throws ioexception  else 

return buf;

} private int readint() throws ioexception

5.介紹readbytes方法

/**

*    讀取輸入流中指定位元組的長度   

* * @param in     輸入流     

* @param length 指定長度     

* @return       指定長度的位元組陣列 

*/public static byte readbytes(inputstream in, long length) throws ioexception

read += cur;//每次讀取的長度累加

bo.write(buffer, 0, cur);

} return bo.tobytearray();//返回內容

}

總結:基於tcp/ip的傳輸方式中,tcp是不會丟包的,如果在你的程式中發生了位元組的丟失,請檢查你的socket輸入位元組流的讀取方式,一定要注意以上**中的紅色標出的內容。

感謝你的閱讀,對自己負責、對父母感恩!

Java中的位元組流

1 位元組輸入流 inputstream 抽象類,其子類 fileinputstream file f 引數為file物件 fileinputstream string path 引數為檔案路徑 objectinputstream inputstream in 物件輸入流,用於反序列化操作 2 位元...

Java使用位元組流讀取資料

輸入流 public static void main string args catch filenotfoundexception e catch ioexception e 輸出流 public static void main string args catch filenotfoundex...

讀取位元組流的方法解決

如果不知道原檔案的大小,可以這樣 filestream fs2 new filestream 2.txt filemode.create byte buffer new byte 4096 這裡的大小可以設定為receivebuffersize while count fs.read buffer,...