JAVA对象和字节数组互转操作

yizhihongxing

Java对象和字节数组互转操作是Java编程中常见的技巧之一。在某些情况下,我们需要把Java对象序列化成字节数组,再把字节数组反序列化为Java对象,这样可以在网络传输、文件存储等场景中实现数据的传输和存储。本文以Java 8为例,讲解Java对象和字节数组互转的完整攻略。

1. Java对象转字节数组

Java对象转字节数组需要使用到Java的序列化机制,即将Java对象转化为字节序列的过程。Java标准库中提供了java.io.Serializable接口,实现该接口的类对象可以被序列化。具体操作如下:

import java.io.*;

public class ObjectToByteArray {
    public static byte[] toBytes(Object object) throws IOException {
        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
        ObjectOutputStream objectStream = new ObjectOutputStream(byteStream);
        objectStream.writeObject(object);
        objectStream.flush();
        return byteStream.toByteArray();
    }
}

在上面的代码中,我们通过字节数组输出流ByteArrayOutputStream将对象序列化为字节数组,具体步骤如下:

  • 创建一个ByteArrayOutputStream对象byteStream,这个对象将Java对象序列化成字节数组。
  • 创建一个ObjectOutputStream对象objectStream,这个对象将Java对象写入byteStream。
  • 调用writeObject()方法将Java对象写入byteStream中。
  • 调用flush()方法刷新objectStream,将Java对象的字节数组刷新到byteStream中。
  • 调用toByteArray()方法,将byteStream中的字节数组返回。

2. 字节数组转Java对象

Java中的字节数组转对象需要用到反序列化机制,即将字节序列转换为Java对象的过程。我们可以使用Java标准库中的ObjectInputStream类来实现反序列化,具体操作如下:

import java.io.*;
public class ByteArrayToObject {
    public static Object toObject(byte[] bytes) throws IOException, ClassNotFoundException {
        ByteArrayInputStream byteStream = new ByteArrayInputStream(bytes);
        ObjectInputStream objectStream = new ObjectInputStream(byteStream);
        Object object = objectStream.readObject();
        objectStream.close();
        return object;
    }
}

在上面的代码中,我们使用byte[]数组作为参数,并通过ByteArrayInputStream将其转换为InputStream,通过ObjectInputStream将其反序列化成Java对象。具体步骤如下:

  • 创建一个ByteArrayInputStream对象byteStream,这个对象将字节流转为Java对象。
  • 创建一个ObjectInputStream对象objectStream,这个对象将byteStream中的字节流反序列化成Java对象。
  • 调用readObject()方法从对象输入流中读取Java对象,并返回。
  • 调用close()方法关闭objectStream,释放资源。

3. 示例说明

为了说明Java对象和字节数组互转的用法,我们可以以Java中的基本类型为例来进行演示。先看到一个示例:

public class SerializationDemo {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        int intObj = 123456;
        byte[] bytes = ObjectToByteArray.toBytes(intObj);
        int intObjAfterDeserialization = (int) ByteArrayToObject.toObject(bytes);
        System.out.println("intObj = " + intObj);
        System.out.println("intObjAfterDeserialization = " + intObjAfterDeserialization);
    }
}

在上面的代码中,我们定义了一个int类型变量intObj,并将它序列化为字节数组。在反序列化的时候,我们将字节数组使用ByteArrayToObject.toObject()方法反序列化为Java对象,并将其赋值给int类型变量intObjAfterDeserialization。最后,我们打印了intObj和intObjAfterDeserialization的值。

输出结果如下:

intObj = 123456 
intObjAfterDeserialization = 123456 

从上面的结果可以看出,我们成功地将Java对象序列化成字节数组并反序列化回来,得到了相同的值。此外,我们还可以以字符串为例进行演示。

public class SerializationDemo {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        String strObj = "Hello, world!";
        byte[] bytes = ObjectToByteArray.toBytes(strObj);
        String strObjAfterDeserialization = (String) ByteArrayToObject.toObject(bytes);
        System.out.println("strObj = " + strObj);
        System.out.println("strObjAfterDeserialization = " + strObjAfterDeserialization);
    }
}

在上面的代码中,我们定义了一个String类型变量strObj,并将它序列化为字节数组。在反序列化的时候,我们将字节数组使用ByteArrayToObject.toObject()方法反序列化为Java对象,并将其赋值给String类型变量strObjAfterDeserialization。最后,我们打印了strObj和strObjAfterDeserialization的值。

输出结果如下:

strObj = Hello, world!
strObjAfterDeserialization = Hello, world!

从上面的结果可以看出,我们也成功地将Java对象序列化成字节数组并反序列化回来,得到了相同的字符串值。

综上所述,Java对象和字节数组互转是Java编程中常用的技巧之一,实现方法简单易懂,可以用于数据的序列化和反序列化,是Java编程中的常见操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA对象和字节数组互转操作 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java如何将Excel数据导入到数据库

    下面我将为你详细解释如何使用Java将Excel数据导入到数据库。整个过程可以分为以下几个步骤: 导入相关依赖库 要想使用Java将Excel数据导入到数据库,我们需要使用Apache的POI库来读取和解析Excel文件,以及使用数据库的JDBC驱动。因此需要在项目中导入以下两个依赖库: <dependency> <groupId>o…

    Java 2023年5月20日
    00
  • 在IDEA中搭建最小可用SpringMVC项目(纯Java配置)

    以下是关于“在IDEA中搭建最小可用SpringMVC项目(纯Java配置)”的完整攻略,其中包含两个示例。 在IDEA中搭建最小可用SpringMVC项目(纯Java配置) Spring MVC是一个基于Java的Web框架,它可以帮我们快速开发Web应用程序。在IDEA中搭建最小可用SpringMVC项目非常简单,本文将介绍如何使用纯Java配置搭建最小…

    Java 2023年5月17日
    00
  • 通过JDBC连接oracle数据库的十大技巧

    十大技巧: 1. 使用最新版本的JDBC驱动程序 使用最新版本的JDBC驱动程序可以确保你使用最新版本的特性和改进。此外,最新版本的驱动程序还解决了以前版本中的一些问题。 2. 使用Oracle JDBC驱动程序的Thin模式 Oracle JDBC驱动程序有两种模式:Thin模式和OCI模式。Thin模式是一种纯Java的驱动程序,不需要Oracle客户端…

    Java 2023年5月20日
    00
  • SpringBoot登录用户权限拦截器

    下面是详细讲解“SpringBoot登录用户权限拦截器”的完整攻略: 什么是SpringBoot登录用户权限拦截器 SpringBoot登录用户权限拦截器主要用于过滤用户请求并确保只有已经登录并拥有相应权限的用户才能够访问特定的资源。在Web应用程序中,用户必须先经过身份验证和授权才能访问特定的页面或资源。因此,SpringBoot登录用户权限拦截器提供了一…

    Java 2023年6月3日
    00
  • Java 中Flyway的使用详解

    Java 中 Flyway 的使用详解 什么是 Flyway Flyway 是一款开源的数据库版本控制工具,采用简单易用的方式为数据库提供更好的管理。Flyway 是用 Java 语言编写的并且支持多种主流数据库,如 MySQL、PostgreSQL、Oracle 等。 Flyway 的工作原理如下: 创建一个名为 flyway_schema_history…

    Java 2023年5月20日
    00
  • Java对文件的随机读写以及压缩处理操作

    针对Java对文件的随机读写以及压缩处理操作,下面是一些攻略供您参考: Java文件的随机读写操作 1. 文件的随机读取(RandomAccessFile) RandomAccessFile类是Java文件操作中用于支持对文件随机访问的类,可以在文件指针任意位置读写数据。使用RandomAccessFile类,我们一般需要实现以下步骤: 创建RandomAc…

    Java 2023年5月31日
    00
  • Java Flink与kafka实现实时告警功能过程

    前言 Java Flink是流处理框架,Kafka是分布式消息队列。两者结合,可以实现实时数据流处理与消息传递。在监测系统、智能决策等领域有广泛的应用。本文将详细讲解Java Flink如何与Kafka结合实现实时告警功能。 实时告警功能简介 实时告警是指在数据流实时处理中,通过特定规则对数据进行预警、报警,即时的发现数据问题,以最快速度进行处理,从而使得业…

    Java 2023年5月20日
    00
  • 分享Java常用几种加密算法(四种)

    分享Java常用几种加密算法(四种) 前言 随着互联网的发展,网络安全问题越来越受到重视,数据的安全性也越来越得到关注,特别是对于一些交易、存储的敏感数据。在这样的背景下,加密算法逐渐被广泛应用于数据的加密、解密、防篡改等安全领域。Java作为一种流行的编程语言,提供了许多常用的加密算法,本文将介绍Java常用的四种加密算法。 对称加密算法 对称加密算法是指…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部