0

このチュートリアルに従ってJavaシリアライズを学んでいます。次のコードを使用して、シリアル化されたファイルからオブジェクトを正常に読み取り、使用しました (インポートは省略されています)。

public class SimpleSerializationTest {
static class Person implements Serializable{
    String name;
    int age;
    boolean isMale;

    static final long serialVersionUID = 314L;
}

public static void main(String[] args) throws Exception{
    Person p = new Person();
    p.name = "Mark";
    p.age = 20;
    p.isMale = true;

    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("mark.ser"));

    try{
        oos.writeObject(p);
    } catch(IOException ioe){
        ioe.printStackTrace();
    } finally{
        oos.close();
    }

    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("mark.ser"));

    try{
        // NOTE: Will change this later!
        Person mark = (Person) ois.readObject();
        System.out.println(mark.name);
    } catch(IOException ioe){
        ioe.printStackTrace();
    } finally{
        ois.close();
    }
}
}

ただし、オブジェクトをシリアル化する主な目的は、オブジェクトを Redis ストアにプッシュできるようにすることです。そのため、オブジェクト形式ではなくバイト形式で必要です。そこで、最後の try ブロックの内容を次のように変更します...

while(true){
   try{
        System.out.println(ois.readByte());
    } catch(EOFException eofe){
        eofe.printStackTrace();
        break;
    }
}

しかし、これは即座に EOFException をスローします。私が間違っていることはありますか?

4

2 に答える 2

3

オブジェクト ストリームはタグ付けされます。これは、期待されるものとは異なるタイプの情報を読み取ると、適切なエラー メッセージを伴う IllegalStateException のようなより意味のあるものではなく、混乱して EOFException が発生する可能性があることを意味します。

ObjectOutputStream によって書き込まれたバイトが必要な場合、最も簡単な方法はメモリのみを使用することです。

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream ois = new ObjectOutputStream(baos);
ois.writeObject(object);
ois.close();
byte[] bytes = baos.toByteArray();
于 2012-10-11T07:34:43.897 に答える
0

インスタンスを redis にプッシュする場合は、 JRedis を使用できます

ドキュメントのサンプル コード。

// instance it
SimpleBean obj = new SimpleBean ("bean #" + i);

// get the next available object id from our Redis counter using INCR command
int id = redis.incr("SimpleBean::next_id")

// we can bind it a unique key using map (Redis "String") semantics now
String key = "objects::SimpleBean::" + id;

// voila: java object db
redis.set(key, obj);

// and lets add it to this set too since this is so much fun
redis.sadd("object_set", obj);
于 2012-10-11T07:59:10.480 に答える