2

オブジェクトがあり、バイトコードにシリアル化したい:

public class objektserial implements Serializable {

private static final long serialVersionUID = 1L;
private String msg ="";
private LinkedList<String> stringlist = new LinkedList<String>();

public objektserial(String nachricht) {
this.msg = nachricht;
this.stringlist = new LinkedList<String>();
}

public objektserial(){      
}

public String getMsg(){
return msg;
}

public void setList(LinkedList<String> list){
this.stringlist = list;
}
}  

私の考え: 1. シリアライズする 2. ByteCode を暗号化する 3. ByteCode を暗号化する 4. デシリアライズする

   // Serialization
objektserial os = new objektserial(textField.getText());
LinkedList<String> list = new LinkedList<String>();
for (int i = 0; i < 10; i++)
    list.add("String Nr. " + i);
os.setList(list);

try {
    FileOutputStream file = new FileOutputStream("objekt.objs");
    ObjectOutputStream o = new ObjectOutputStream(file);
    o.writeObject(os);
    o.close();
} catch (IOException ex) {
    System.err.println(e);
}

// Encrypt
try {
    BufferedReader in = new BufferedReader(new FileReader("objekt.objs"));
    String s = "";
    String text = "";
    while ((s = in.readLine()) != null) {
        text += s;
    }
    String passwordEnc = AESencrp.encrypt(text);
    String passwordDec = AESencrp.decrypt(passwordEnc);
    File file = new File("objekt.objs");
    FileWriter fw = new FileWriter(file, false);
    BufferedWriter writer = new BufferedWriter(fw);

    writer.write(passwordEnc);

    writer.close();

    System.out.println("Plain Text : " + text);
    System.out.println("Encrypted Text : " + passwordEnc);
    System.out.println("Decrypted Text : " + passwordDec);
    } catch (Exception eiasdasd) {
    }

// Decrypt
try {
        BufferedReader in = new BufferedReader(new FileReader("objekt.objs"));
    String s = "";
    String text = "";
    while ((s = in.readLine()) != null) {
        text += s;
    }
    String passwordDec = AESencrp.decrypt(text);
    File file = new File("objekt.objs");
    FileWriter fw = new FileWriter(file, false);
    BufferedWriter writer = new BufferedWriter(fw);

    writer.write(passwordDec);

    writer.close();

    System.out.println("Plain Text : " + text);
    System.out.println("Encrypted Text : " + text);
    System.out.println("Decrypted Text : " + passwordDec);
} catch (Exception eiasdasd) {
}

// Read&Dezerialize
try {
FileInputStream file = new FileInputStream("objekt.objs");
ObjectInputStream o = new ObjectInputStream(file);
objektserial obs = (objektserial) o.readObject();
o.close();
textField_1.setText(obs.getMsg());
} catch (IOException e) {
    System.err.println(e);
} catch (ClassNotFoundException e) {
    System.err.println(e);
}

"java.io.UTFDataFormatException"それは問題なく動作しますが、シリアル化されたオブジェクトが大きすぎる場合 (メモ帳 ++ でバイトコード ファイルを開くと複数行) 、.

java.io.UTFDataFormatException復号化されたファイルを再度デシリアライズして読み取ろうとすると、エラーが発生します...

これを修正するにはどうすればよいですか?

4

1 に答える 1

1

あなたは ObjectStream.writeObject() で書いています。ObjectInputStream.readObject() で読み取る必要があります。

シリアル化されたオブジェクトは線ではありません。また、Reader を除外する文字データでもありません。

于 2013-09-21T00:26:51.703 に答える