【问题标题】:byte array in java returning null after conversion from objectsjava中的字节数组在从对象转换后返回null
【发布时间】:2011-11-15 07:44:19
【问题描述】:

我需要在 android 中以字节的形式发送我的手机联系人。所以我创建了一个实现 serializable 的 bean 类,但是在将 bean 类的 arraylist 转换为字节数组后,字节数组总是显示为空。这是我的示例代码。

 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 ObjectOutputStream oos = new ObjectOutputStream(baos);
 oos.writeObject(presentContacts);
 byte[] buf = baos.toByteArray();

这里的presentContacts是bean类的ArrayList。字节数组,buf 总是返回 null 但 presentContacts 不为 null。

【问题讨论】:

  • 你是说对toByteArray()的调用产生了null
  • 是的,toByteArray() 正在产生 null。
  • 你确定你没有任何例外吗?也许您的 bean 类的不可序列化字段?查看 ByteArrayOutputStream 的来源,它似乎不可能返回 null。

标签: java android serialization javabeans


【解决方案1】:

您可能应该关闭或至少刷新ObjectOutputStream。 像这样的

 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 ObjectOutputStream oos = new ObjectOutputStream(baos);
 oos.writeObject(presentContacts);
 oos.flush(); 
 byte[] buf = baos.toByteArray();

【讨论】:

  • 尝试关闭 ObjectOutputStream 而不是刷新
  • 序列化时可能发生错误(检查您的 bean 是否可序列化)
  • 每次,我写入 OutputStream,我在 logcat WARN/AudioFlinger(72) 中收到以下警告:写入阻塞 91 毫秒,86 延迟写入,线程 0xdf38 写入流时是否意味着什么,我不知道这个错误。
  • 如何检查 byte[] buf 是否为空?也许您需要在 byte[] buf = baos.toByteArray(); 之后放置断点尝试调用 System.out.println(Arrays.toString(buf));作为报价@RayToal;冲洗工作正常
  • flush 用于转换,但在将字节转换回 arraylist 时有时会起作用,有时不是 .thankx 的帮助..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
相关资源
最近更新 更多