Heim > Java > javaLernprogramm > Hauptteil

Prozess der gegenseitigen Konvertierung von JAVA-Objekten und Byte-Arrays

coldplay.xixi
Freigeben: 2020-08-25 16:38:03
nach vorne
2842 Leute haben es durchsucht

Prozess der gegenseitigen Konvertierung von JAVA-Objekten und Byte-Arrays

【Verwandte Lernempfehlungen: Basic Java Tutorial

0x01 Erstellen Sie die zu konvertierende Klasse und Hauptfunktion.

Beachten Sie, dass hier die Serialisierung implementiert werden muss.

package day1; 
import java.io.Serializable; 
public class Test360 implements Serializable {
    @Override
    public String toString() {
        return "Test360{" +
            "name='" + name + '\'' +
            '}';
    }
 
    String name="test";
}
Nach dem Login kopieren

0x02 Konvertieren Sie Objekte und Byte-Arrays in jedes other

package day1; 
import sun.jvm.hotspot.utilities.Assert; 
import java.io.*;
 
public class arreytobytes  {
  public static void main(String[] args) throws Exception {
    Test360 test =new Test360();
    System.out.print ( "java class对象转字节数组\n" );
    byte[] bufobject = getBytesFromObject(test);
    for(int i=0 ; i<bufobject.length ; i++) {
      System.out.print(bufobject[i] + ",");
    }
    System.out.println ("\n");
    System.out.print ("字节数组还原对象\n");
    Object object1 = null;
    object1=deserialize(bufobject);
    Test360 t1 =(Test360)object1;
    System.out.println (t1.name);
  }
  public static byte[] getBytesFromObject(Serializable obj) throws Exception {
    if (obj == null) {
      return null;
    }
    ByteArrayOutputStream bo = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(bo);
    oos.writeObject(obj);
    return bo.toByteArray();
  }
  public static Object deserialize(byte[] bytes) {
    Object object = null;
    try {
      ByteArrayInputStream bis = new ByteArrayInputStream(bytes);//
      ObjectInputStream ois = new ObjectInputStream(bis);
        object = ois.readObject();
      ois.close();
      bis.close();
    } catch (IOException ex) {
      ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
      ex.printStackTrace();
    }
    return object;
  }
}
Nach dem Login kopieren

Running result

Java-Klassenobjekt zu Byte-Array

-84,-19,0,5,115,114,0,12,100,97,121,49,46,84,101,115,116,51,54, 48,76, - 69,81,12,-51,122,126,-123,2,0,0,120,112,

Byte-Array-Wiederherstellungsobjekt

test

Ergänzende Kenntnisse: Interaktion zwischen Java-Objekten und Byte[]-Arrays Konvertierung, Komprimierungs- und Dekomprimierungsoperationen

Im Folgenden wird die gegenseitige Konvertierung zwischen Java-Objekten und Byte[]-Arrays vorgestellt. Und führen Sie einen Komprimierungsvorgang für Byte[]-Daten durch. Durch das Konvertieren von Java-Objekten in Byte[]-Arrays kann Caching in Redis implementiert werden. (Keine Einführung hier). Lassen Sie uns ohne weiteres das Beispiel öffnen:

Zuerst erstellen wir ein Java-Objekt: Person.java

public class Person implements Serializable{
  private String userName;
  private String password;
  private String phone;
  private String email;
  private String sex;
  private String age;

  public Person(){}

  public Person(String userName, String password, String phone, String email,
      String sex, String age) {
    super();
    this.userName = userName;
    this.password = password;
    this.phone = phone;
    this.email = email;
    this.sex = sex;
    this.age = age;
  }
  @Override
  public String toString() {
    return "Person [userName=" + userName + ", password=" + password
        + ", phone=" + phone + ", email=" + email + ", sex=" + sex
        + ", age=" + age + "]";
  }
  public String getUserName() {
    return userName;
  }
  public void setUserName(String userName) {
    this.userName = userName;
  }
  public String getPassword() {
    return password;
  }
  public void setPassword(String password) {
    this.password = password;
  }
  public String getPhone() {
    return phone;
  }
  public void setPhone(String phone) {
    this.phone = phone;
  }
  public String getEmail() {
    return email;
  }
  public void setEmail(String email) {
    this.email = email;
  }
  public String getSex() {
    return sex;
  }
  public void setSex(String sex) {
    this.sex = sex;
  }
  public String getAge() {
    return age;
  }
  public void setAge(String age) {
    this.age = age;
  }
}
Nach dem Login kopieren

Das Folgende zeigt die Konvertierung des Personenobjekts: Object2ByteArray.java

public class Object2ByteArray {
  public static void main(String[] args) {
    try {
      Person person=new Person("userName", "password", "phone", "email", "sex", "age");
      System.out.println("person:"+person);
      ByteArrayOutputStream bos=new ByteArrayOutputStream();
      ObjectOutputStream oos=new ObjectOutputStream(bos);
      oos.writeObject(person);
      //得到person对象的byte数组
      byte[] personByteArray = bos.toByteArray();
      System.out.println("before compress:"+personByteArray.length);
      //将byte数据压缩
      byte[] zipPersonByteArray = compress(personByteArray);
      System.out.println("after compress:"+zipPersonByteArray.length);
      closeStream(oos);
      closeStream(bos);
      //从byte数组中还原person对象
      ByteArrayInputStream bin=new ByteArrayInputStream(personByteArray);
      ObjectInputStream ois=new ObjectInputStream(bin);
      Person restorePerson = (Person) ois.readObject();
      System.out.println(restorePerson);
      closeStream(ois);
      closeStream(bin);
      //从压缩的byte数组中还原person对象
      byte[] unCompressByte = unCompress(zipPersonByteArray);
      ByteArrayInputStream zipBin=new ByteArrayInputStream(unCompressByte);
      ObjectInputStream zipOis=new ObjectInputStream(zipBin);
      Person zipBytePerson=(Person) zipOis.readObject();
      System.out.println("compress person:"+zipBytePerson.toString());
      closeStream(zipOis);
      closeStream(zipBin);
    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  /**
   *   
   * @description   关闭数据流
   * @param oStream    
   *   
   */
  public static void closeStream(Closeable oStream){
    if(null!=oStream){
      try {
        oStream.close();
      } catch (IOException e) {
        oStream=null;//赋值为null,等待垃圾回收
        e.printStackTrace();
      }
    }
  }

  /**
   *   
   * @description   将byte 数组压缩
   * @param bt
   * @return   
   */
  public static byte[] compress(byte[] bt){
    //将byte数据读入文件流
    ByteArrayOutputStream bos=null;
    GZIPOutputStream gzipos=null;
    try {
      bos=new ByteArrayOutputStream();
      gzipos=new GZIPOutputStream(bos);
      gzipos.write(bt);
    } catch (Exception e) {
      e.printStackTrace();
    }finally{
      closeStream(gzipos);
      closeStream(bos);
    }
    return bos.toByteArray();
  }

  /**
   *   
   * @description   解压缩byte数组
   * @param bt
   * @return   
   */
  public static byte[] unCompress(byte[] bt){
    //byte[] unCompress=null;
    ByteArrayOutputStream byteAos=null;
    ByteArrayInputStream byteArrayIn=null;
    GZIPInputStream gzipIn=null;
    try {
      byteArrayIn=new ByteArrayInputStream(bt);
      gzipIn=new GZIPInputStream(byteArrayIn);
       byteAos=new ByteArrayOutputStream();
      byte[] b=new byte[4096];
      int temp = -1;
      while((temp=gzipIn.read(b))>0){
        byteAos.write(b, 0, temp);
      }
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }finally{
      closeStream(byteAos);
      closeStream(gzipIn);
      closeStream(byteArrayIn);
    }
    return byteAos.toByteArray();
  }
}
Nach dem Login kopieren

Das obige Beispiel zeigt : Konvertierung von Java-Objekten in Byte[]-Daten;

Byte[]-Datenwiederherstellung von Java-Objekten;

person:Person [userName=userName, password=password, phone=phone, email=email, sex=sex, age=age]
before compress:189
after compress:156
Person [userName=userName, password=password, phone=phone, email=email, sex=sex, age=age]
compress person:Person [userName=userName, password=password, phone=phone, email=email, sex=sex, age=age]
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonProzess der gegenseitigen Konvertierung von JAVA-Objekten und Byte-Arrays. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage