2017-07-26 23 views
0

私は、ObjectOutputStream/ObjectInputStreamがヘッダーを使用していることを認識していますが、これは本当に適切な使用例ではありません。しかし、とにかく私はが、DataInputとDataOutputのインタフェースを使ってデータをラップする必要があります。ObjectOutputStreamとObjectInputStreamを使用してバイト配列に正しく(シリアライズする)方法を教えてください。

import java.util.*; 
import java.lang.*; 
import java.io.*; 

class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     byte[] array = serialize("test"); 
     String deserialized = deserialize(array); 

     System.out.println(deserialized); 
    } 

    private static byte[] serialize(String test) { 
     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 

     try { 
      ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); 

      objectOutputStream.writeUTF(test); 

      byteArrayOutputStream.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return byteArrayOutputStream.toByteArray(); 
    } 

    private static String deserialize(byte[] array) { 
     String temp = null; 

     try { 
      ObjectInputStream objectInputStream = new ObjectInputStream(new ByteArrayInputStream(array)); 

      temp = objectInputStream.readUTF(); 

      objectInputStream.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return temp; 
    } 
} 

私は実際にそれを得る方法を得ていません。私の言うとおり、問題は現在そのヘッダーですか?

+0

何が問題なのですか?あなたは例外または間違った結果を持っていますか?また、あなたの投稿に[最小限の作業例](https://stackoverflow.com/help/mcve)を提供することもできます。 – talex

+0

@talex EOFExceptionをスローします。どうぞご覧ください[here](http://ideone.com/iIC9TI) – Tobseb

+0

外部リソースが信頼できないため、あなたの質問にあなたのコードを投稿してください。誰かが将来同じ問題を抱えているかもしれないが、壊れたリンク。今回私はあなたのためにそれをしましたが、将来自分でやってください。 – talex

答えて

2

byteArrayOutputStreamを閉じる前にobjectOutputStream.flush();に電話する必要があります。

ObjectOutputStreamは内部バッファを持っているので、バイト配列内の文字列の先頭部分だけが得られます。

+0

質問に固執していただけますか? :)もちろん、あなたは正しいですが、これは何も変わりません:http://ideone.com/dAsGdO – Tobseb

+0

'objectOutputStream'を' byteArrayOutputStream'ではなくフラッシュする必要があります。 'byteArrayOutputStream'をフラッシュすることは役に立たない。常にバッファに直接書き込みます。 – talex

+0

@Tobseb、あなたのコードで 'objectOutputStream.writeUTF(test);を実行する必要があります。 \t \t \t objectOutputStream.flush(); \t \t \t byteArrayOutputStream.close(); ' –

関連する問題