首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Java泛型T[]写入DataOutput流?

从Java泛型T[]写入DataOutput流?
EN

Stack Overflow用户
提问于 2010-09-21 18:14:14
回答 3查看 736关注 0票数 1

给定一个泛型数组T[],其中T extends java.lang.Number,我想使用ByteArrayOutputStream将数组写入byte[]java.io.DataOutput (而且像java.io.DataOutputStream这样的实现看起来很接近我所需要的,但是没有一般的方法来编写T[]数组的元素。我想做这样的事

代码语言:javascript
复制
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataOutputStream dataOut = new DataOutputStream(out);

for (T v : getData()) {
  dataOut.write(v); // <== uh, oh
}

但是在<T> void write(T v)上没有通用的DataOutput方法。

有什么办法可以避免写一大堆isntanceof意大利面吗?

澄清

byte[]被发送到一个非Java客户端,因此对象序列化不是一个选项。例如,我需要从byte[]生成的Float[]成为C语言中的有效float[]

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-21 18:17:44

不,没有。无论如何,instanceof的“意大利面”必须存在于某个地方。创建一个通用方法,用于执行以下操作:

代码语言:javascript
复制
public <T> void write(DataOutputStream stream, T object) {
   // instanceofs and writes here
}
票数 4
EN

Stack Overflow用户

发布于 2010-09-21 18:22:26

您可以只使用ObjectOutputStream而不是DataOutputStream,因为所有Number都保证是可序列化的。

票数 3
EN

Stack Overflow用户

发布于 2010-09-21 18:57:42

关于最后一次编辑,我会尝试这种方法(不管它是否丑陋)。

1)检查每个实例的类型

2)将其存储到原语中,并提取所需的字节(如整数),如下(前两个字节)

代码语言:javascript
复制
    byte[] bytes = new byte[2];
    bytes[0]=(byte)(i>>8);
    bytes[1]=(byte)i;

3)通过byte[]数组发送

4)陷入困境,因为不同的c实现对整数使用不同的字节数,因此没有人能够保证结果与初始数字相等。例如,如何处理带有2字节c ++整数的java的4字节整数?你怎么处理长时间的?

所以.我没办法做,但是,我不是这方面的专家.

如果我错了,请纠正我。;-)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3763186

复制
相关文章

相似问题

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