首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java Serializable Object to Byte Array

Java Serializable Object to Byte Array
EN

Stack Overflow用户
提问于 2010-05-15 02:31:20
回答 8查看 429.4K关注 0票数 318

假设我有一个可序列化的类AppMessage

我想通过套接字将它作为byte[]传输到另一台机器,在那里它是从接收到的字节重建的。

我怎样才能做到这一点呢?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-05-15 02:33:23

准备要发送的字节数组:

代码语言:javascript
复制
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = null;
try {
  out = new ObjectOutputStream(bos);   
  out.writeObject(yourObject);
  out.flush();
  byte[] yourBytes = bos.toByteArray();
  ...
} finally {
  try {
    bos.close();
  } catch (IOException ex) {
    // ignore close exception
  }
}

从字节数组创建对象:

代码语言:javascript
复制
ByteArrayInputStream bis = new ByteArrayInputStream(yourBytes);
ObjectInput in = null;
try {
  in = new ObjectInputStream(bis);
  Object o = in.readObject(); 
  ...
} finally {
  try {
    if (in != null) {
      in.close();
    }
  } catch (IOException ex) {
    // ignore close exception
  }
}
票数 439
EN

Stack Overflow用户

发布于 2015-06-22 04:07:12

如果您使用JavaJava7,则可以使用try with resources改进已被接受的解决方案

代码语言:javascript
复制
private byte[] convertToBytes(Object object) throws IOException {
    try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
         ObjectOutputStream out = new ObjectOutputStream(bos)) {
        out.writeObject(object);
        return bos.toByteArray();
    } 
}

反之亦然:

代码语言:javascript
复制
private Object convertFromBytes(byte[] bytes) throws IOException, ClassNotFoundException {
    try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
         ObjectInputStream in = new ObjectInputStream(bis)) {
        return in.readObject();
    } 
}
票数 99
EN

Stack Overflow用户

发布于 2019-09-12 16:06:17

另一个有趣的方法来自com.fasterxml.jackson.databind.ObjectMapper

byte[] data = new ObjectMapper().writeValueAsBytes(JAVA_OBJECT_HERE)

Maven依赖

代码语言:javascript
复制
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2836646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档