今天我想介紹一下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,...