Home > Java > javaTutorial > body text

JAVA object and byte array mutual conversion process

coldplay.xixi
Release: 2020-08-25 16:38:03
forward
2841 people have browsed it

JAVA object and byte array mutual conversion process

[Related learning recommendations: java basic tutorial

0x01 Create the class and main function to be converted

Note that serialization must be implemented here

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

0x02 object and byte array mutual conversion

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;
  }
}
Copy after login

Running result

Convert java class object to 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 restoration object

test

Supplementary knowledge:Mutual conversion between java objects and byte[] arrays, compression and decompression operations

The following is an introduction to java objects Conversion between and between byte[] arrays. And perform compression operation on byte[] data. Converting java objects into byte[] arrays can be used to implement caching in redis. (No introduction here). Without further ado, let’s open the example directly:

First we create a java object: 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;
  }
}
Copy after login

The following demonstrates the conversion of the person object: 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();
  }
}
Copy after login

The above example shows: conversion of java objects to byte[] data; compression and decompression operations of

byte[] data;

byte[] data restoration Operation of java object;

Run result:

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]
Copy after login

The above is the detailed content of JAVA object and byte array mutual conversion process. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:jb51.net
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template