4

Javaオブジェクトをファイルから/へシリアライズ/デシリアライズするDZone( http://www.dzone.com/links/r/java_custom_serialization_example.html )のこのコードがあります。

final class Hello implements Serializable
{
    int x = 10;
    int y = 20;

    public int getX()
    {
        return x;
    }
    public int getY()
    {
        return y;
    }
}


public class SerializedComTest {

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
    }

    @Test
    public void testFile() throws IOException, ClassNotFoundException {
        Hello h = new Hello();
        FileOutputStream bs = new FileOutputStream("hello.txt"); // ("testfile");
        ObjectOutputStream out = new ObjectOutputStream(bs);
        out.writeObject(h);
        out.flush();
        out.close();

        Hello h2;
        FileInputStream fis = new FileInputStream("hello.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);
        h2 = (Hello) ois.readObject();

        assertTrue(10 == h2.getX());
        assertTrue(20 == h2.getY());
    }
}

Javaソケットを使用してシリアル化されたオブジェクトを転送するにはどうすればよいですか? また、シリアル化/逆シリアル化されたオブジェクトをバイト配列との間で保存するにはどうすればよいですか。

4

4 に答える 4

11

これは、バイト配列との間でシリアル化するためのコードです。私はからヒントを得ました - Java Serializable Object to Byte Array

@Test
public void testByteArray() throws IOException, ClassNotFoundException, InterruptedException {
    Hello h = new Hello();

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutput out = new ObjectOutputStream(bos);
    out.writeObject(h);
    byte b[] = bos.toByteArray();
    out.close();
    bos.close();

    Hello h2;
    ByteArrayInputStream bis = new ByteArrayInputStream(b);
    ObjectInput in = new ObjectInputStream(bis);
    h2 = (Hello) in.readObject();

    assertTrue(10 == h2.getX());
    assertTrue(20 == h2.getY());
}
于 2013-10-16T04:00:24.633 に答える
1

Javaソケットを使用してシリアル化されたオブジェクトを転送するにはどうすればよいですか?

その出力ストリームを でラップしますObjectOutputStream

また、シリアル化/逆シリアル化されたオブジェクトを文字列との間で保存するにはどうすればよいですか。

あなたはそうしない。シリアル化されたオブジェクトはバイナリであり、バイト配列に格納する必要があります。逆シリアル化されたオブジェクトは、文字列ではなくオブジェクトそのものです。

readObject()それらとwriteObject()メソッドは必要ありません。デフォルトでは起こらないことは何もしません。

于 2013-10-16T03:15:41.747 に答える
0

ファイルストリームを objectstream クラスでラップしたように、ソケットでも同じことを行います。シリアル化されたオブジェクトを文字列に「保存」しないでください。

于 2013-10-16T03:13:45.183 に答える