[英]Sending the same objects with different fields over an object serialized stream
[英]Sending serialized objects and byte[] from same stream
我有一個客戶端服務器應用程序,它們通過objectoutputstream和objectinputstream進行通信。 我將序列化的對象從一個對象發送到另一個對象,但是現在我也想發送文件。 如果我在序列化對象內部傳遞文件的byte [],則可以傳輸該對象,但是對象停留在objectoutputstream和objectinputstream上,如果文件足夠大,則在發送一些消息后,我會得到內存異常。 如果我像這樣發送:
File file = new File("C:\\a.txt");
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] buffer = new byte[1024*1024*10];
int n = -1;
while((n = bis.read(buffer))!=-1) {
oos.write(buffer,0,n);
}
並閱讀:
while ((fromServer = ois.read()) != null) {
}
效果很好。
我的問題是,我是否必須實施一個系統來知道是否必須要writeObject / readObject還是只需要寫/讀? 我是否必須擺脫串行通信,是否必須創建另一個用於讀取和寫入的流?
您必須定義一個沒有歧義的協議,並在客戶端和服務器上堅持使用該協議。
例如,如果先發送一個字節流,然后再發送一個對象,則在接收端,您將無法知道字節流何時結束以及對象何時開始。
解決此問題的協議可能是:
然后,接收方可以讀取大小(N),然后從流中讀取N個字節,然后讀取對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.