Java Serializable Object to Byte Array

本文介绍了如何将Java对象转换为字节数组进行序列化,以便于在网络中传输或保存到文件中;同时也提供了如何从字节数组中还原出原始Java对象的方法实现反序列化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@see   http://stackoverflow.com/questions/2836646/java-serializable-object-to-byte-array


Prepare bytes to send:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = null;
try {
  out = new ObjectOutputStream(bos);   
  out.writeObject(yourObject);
  byte[] yourBytes = bos.toByteArray();
  ...
} finally {
  out.close();
  bos.close();
}
 


Create object from bytes:

ByteArrayInputStream bis = new ByteArrayInputStream(yourBytes);
ObjectInput in = null;
try {
  in = new ObjectInputStream(bis);
  Object o = in.readObject(); 
  ...
} finally {
  bis.close();
  in.close();
}



Java中,将对象转换为字节数组有多种方法。一种常见的方法是实现Java自带的Serializable接口,并使用ObjectInputStream和ObjectOutputStream来进行序列化和反序列化。可以使用以下方法将对象转换为字节数组: ``` private byte[] objectToByte(Object obj) { byte[] bytes; try { ByteArrayOutputStream bo = new ByteArrayOutputStream(); ObjectOutputStream oo = new ObjectOutputStream(bo); oo.writeObject(obj); bytes = bo.toByteArray(); bo.close(); oo.close(); } catch(Exception ae) { throw ae; } return bytes; } ``` 另一种方法是使用ByteBuffer类,该类提供了一种方便的方式来操作字节数据。您可以使用ByteBuffer将对象的字段按照特定的顺序写入字节缓冲区,并使用array()方法将字节缓冲区转换为字节数组。然后,您可以使用相同的字节缓冲区将字节数组转换回对象。以下是一个示例: ``` public class Student { byte height; int age; long phone; } public static void main(String[] args) { Student student = new Student(); student.height = (byte) 185; student.age = 23; student.phone = 18380330237L; // 对象序列化到字节数组 ByteBuffer byteBuffer = ByteBuffer.allocate(100).order(ByteOrder.BIG_ENDIAN); byteBuffer.put(student.height); byteBuffer.putInt(student.age); byteBuffer.putLong(student.phone); byte[] array = byteBuffer.array(); // 字节数组序列化到对象 byteBuffer = ByteBuffer.allocate(100).order(ByteOrder.BIG_ENDIAN); byteBuffer.put(array); byteBuffer.position(0); Student student2 = new Student(); student2.height = byteBuffer.get(); student2.age = byteBuffer.getInt(); student2.phone = byteBuffer.getLong(); } ``` 此外,还有一些第三方工具可用于更方便地将字节转换为Java对象,例如magic-byte库。您可以在GitHub上找到该库的详细信息和使用方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [JAVA对象转字节数组](https://blog.csdn.net/jioulongzi/article/details/122101214)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值