代码之家  ›  专栏  ›  技术社区  ›  Barry Wark

从Java generic T[]写入DataOutput流?

  •  1
  • Barry Wark  · 技术社区  · 15 年前

    给定泛型数组 T[] ,在哪里 T extends java.lang.Number byte[] ,使用 ByteArrayOutputStream java.io.DataOutput (以及一种实现,例如 java.io.DataOutputStream T[] 数组。我想做一些像

    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

    澄清

    这个 正在发送到非Java客户机,因此对象序列化不是一个选项。例如,我需要 生成于 Float[] float[] 在C。

    3 回复  |  直到 15 年前
        1
  •  4
  •   Bozho    15 年前

    instanceof

    public <T> void write(DataOutputStream stream, T object) {
       // instanceofs and writes here
    }
    
        2
  •  3
  •   Roland Illig    15 年前

    你可以用一个 ObjectOutputStream 而不是 DataOutputStream Number s保证是可序列化的。

        3
  •  1
  •   InsertNickHere    15 年前

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

    1) 检查每个实例的类型
    2) 将其存储到一个原语中,并提取所需的字节(例如整数),如下所示(对于前两个字节)

        byte[] bytes = new byte[2];
        bytes[0]=(byte)(i>>8);
        bytes[1]=(byte)i;
    

    3) 通过byte[]数组发送
    4) 陷入困境是因为不同的c实现使用不同的整数字节数,所以没有人能保证结果将等于您的初始数字。e、 如何处理java的4字节整数和c的2字节整数?你怎么处理长时间?

    所以…我不知道怎么做,但是,我不是这方面的专家。。。。