色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java序列化和反序列化亂碼

Java序列化和反序列化是一種將對(duì)象轉(zhuǎn)換成二進(jìn)制流,或?qū)⒍M(jìn)制流轉(zhuǎn)換成對(duì)象的過(guò)程。Java序列化和反序列化常用于網(wǎng)絡(luò)傳輸和數(shù)據(jù)存儲(chǔ)中。然而,在使用Java序列化和反序列化時(shí),有時(shí)會(huì)出現(xiàn)亂碼問(wèn)題。

Java序列化和反序列化過(guò)程中,使用的編碼通常是UTF-8。如果程序中使用的編碼類(lèi)型與UTF-8不同,就會(huì)出現(xiàn)亂碼。

// 示例代碼:
public class SerializationDemo {
public static void main(String[] args) throws Exception {
String str = "這是一段中文";
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt"));
oos.writeObject(str);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.txt"));
String s = (String) ois.readObject();
System.out.println(s);
ois.close();
}
}

在上面的示例代碼中,如果系統(tǒng)默認(rèn)編碼不是UTF-8,那么輸出的字符串就會(huì)出現(xiàn)亂碼。解決這個(gè)問(wèn)題有多種方法:

  1. 指定編碼類(lèi)型。
  2. // 修改示例代碼:
    public class SerializationDemo {
    public static void main(String[] args) throws Exception {
    String str = "這是一段中文";
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt"));
    oos.writeObject(str);
    oos.close();
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.txt"));
    String s = new String((byte[]) ois.readObject(), "UTF-8");
    System.out.println(s);
    ois.close();
    }
    }

    在讀取對(duì)象時(shí),將字節(jié)數(shù)組轉(zhuǎn)換成String時(shí)指定編碼為UTF-8。

  3. 在序列化和反序列化時(shí),添加自定義的轉(zhuǎn)換器。
  4. // 自定義轉(zhuǎn)換器
    public class UTF8Serialization {
    public static byte[] serialize(Object obj) throws Exception {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(out);
    oos.writeObject(obj);
    byte[] bytes = out.toByteArray();
    oos.close();
    out.close();
    return bytes;
    }
    public static Object deserialize(byte[] bytes) throws Exception {
    ByteArrayInputStream in = new ByteArrayInputStream(bytes);
    ObjectInputStream ois = new ObjectInputStream(in);
    Object obj = ois.readObject();
    ois.close();
    in.close();
    return obj;
    }
    }
    // 修改示例代碼
    public class SerializationDemo {
    public static void main(String[] args) throws Exception {
    String str = "這是一段中文";
    byte[] bytes = UTF8Serialization.serialize(str);
    String s = (String) UTF8Serialization.deserialize(bytes);
    System.out.println(s);
    }
    }

    通過(guò)自定義轉(zhuǎn)換器,可以在序列化和反序列化時(shí)使用自定義的編碼。

上一篇php - = .
下一篇php - fetch()