为什么Java的nio.ByteBuffer无法序列化?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么Java的nio.ByteBuffer无法序列化?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1561字,纯文字阅读大概需要3分钟。
内容图文
有时,将其与其余数据序列化会很有意义.现在我们必须拆开它.
编辑:还有其他可用的选项吗?例如. Apache commons lang具有MutableInt,它是围绕原始int的轻量级包装器吗?
解决方法:
我的猜测是,由于ByteBuffer的内容已经是blob,因此,从流/通道读取/写入流/通道并不复杂,该语言的设计人员认为不需要使ByteBuffers可序列化.
从理论上讲,您可以创建自己的Externalizable ByteBuffer impl,例如:
package java.nio; //has to be in java.nio pkg, _get() and _put and pkg-private
public class SerializableByteBuffer extends ByteBuffer implements Externalizable {
private ByteBuffer theActualBuffer;
public SerializableByteBuffer(ByteBuffer theActualBuffer) {
super(0, 0, 1, 1);
this.theActualBuffer = theActualBuffer;
}
// these 2 are package private. this was obviously not designed to be extended
@Override
byte _get(int i) {
return theActualBuffer._get(i);
}
@Override
void _put(int i, byte b) {
theActualBuffer._put(i, b);
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
//write length + type of underlying buffer (enum?) + contents
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
//read length and type of buffer, instantiate buffer of correct type, read contents into buffer
}
//delegate all methods. this is going to be a lot of work as some return buffer copies
}
但是鉴于您必须将其放置在java.nio包中,并正确委派约20个方法(其中有些比较棘手),这将是很多艰苦的工作,并且结果永远不会很漂亮.
同样,实际的(反)序列化将永远不会真正有效,因为(我知道吗?)没有办法从ObjectOutput获取Channel,这意味着您需要使用中间字节[]来完成老式方法. 4096]缓冲区或其他东西
内容总结
以上是互联网集市为您收集整理的为什么Java的nio.ByteBuffer无法序列化?全部内容,希望文章能够帮你解决为什么Java的nio.ByteBuffer无法序列化?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。