2015-05-28 29 views
0

我有一個序列化代碼,可以將一個對象序列化爲一個bytebuffer。我想先將緩衝區的長度寫入流,然後再寫入字節緩衝區本身。這裏是我如何寫outputStream:整數和bytebuffer到Java輸出流的序列化

MyObject = new MyObject(); 
//fill in MyObject 
... 
DataOutputStream out = new DataOutputStream(new FileOutputStream("a.txt")); 
ByteBuffer buffer = MySerializer.encode(myObject); 
int length = buffer.remaining(); 
out.write(length); 
WritableByteChannel channel = Channels.newChannel(out); 
channel.write(buffer); 
out.close(); 

我驗證了這段代碼,它似乎工作正常。但是當我嘗試反序列化時,我無法正確執行。這裏是我的解串器的代碼片段:

DataInputStream in = new DataInputStream(new FileInputStream("a.txt")); 
int objSize = in.readInt(); 
byte[] byteArray = new byte[objSize]; 
... 

的問題是,長度沒有被正確從流中讀取。
任何人都可以幫我弄清楚我在這裏錯過了什麼?

回答

2

write寫入一個字節。 readInt讀取4個字節並將它們組合成一個int

你可能想寫writeInt(它將int分成4個字節並寫入)的長度。