【问题标题】:Why is there not an IntegerArrayInputStream class? [closed]为什么没有 IntegerArrayInputStream 类? [关闭]
【发布时间】:2014-03-13 05:21:33
【问题描述】:

我想知道为什么没有 IntegerArrayInputStream 的类,因为我有一个 int 数组可以将 int 写入图像文件格式。我还看到将整数转换为字节有很多困惑。

【问题讨论】:

  • 请注意,ByteBuffer 可能适合此处。
  • 整数值不代表一个字节的完全不同的值吗?
  • 如果您最终使用 ByteArrayInputStream 等自己编写了一些东西,请记住您可能需要更正“endian”-ness。 (java中的整数不一定/通常在二进制级别与其他地方的整数不等价)
  • ByteBuffer 有一个putInt(int) 方法,可以将int 转换为添加到ByteBuffer 的字节。然后您可以将ByteBuffer 转换为byte[]
  • 我确实做到了,并且在循环遍历字节数组时只返回 0(零)?

标签: java int byte inputstream


【解决方案1】:

抱歉,如果你想将整数写入字节,你不能使用

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(baos);
    int x = 555;
    dos.writeInt(x);
    dos.close();

    byte[] bytes = baos.toByteArray();

    DataInputStream dis = new DataInputStream(new ByteArrayInputStream(bytes));
    int y = dis.readInt();
    System.out.println(y);

?

【讨论】:

  • 这会将43 写入流。 ; )
  • 答案已编辑。谢谢@Radiodef
【解决方案2】:

任何函数库可以提供多少都是有限度的;在某些时候,他们不得不说“如果您需要一个,请编写一个或从 JRE 以外的某个包中获取一个。”你提出的不是特别频繁需要的东西(不像ByteArrayInputStream,它经常使用的),也不是特别难以实现的东西,所以我并不感到惊讶它没有'切入点。

【讨论】:

    【解决方案3】:

    之所以有ByteArrayInputStream,主要是为了让人们将整个字符串缓冲区(很容易变成字节数组)转储到文件中。已经存在仅用于图像的 Java 库。但是字节数组比整数数组更广泛地适用于任何需要 I/O 的东西。

    【讨论】:

      【解决方案4】:

      我在上面发表了评论,但我决定也做出一个完整的答案。部分原因是 Integer 类是 Java 特定的东西。如果您不关心可移植性并且只想读/写 Integer,Integer 是可序列化的,您可以将其视为对象或字符串值。它效率不高,但有效。如果您确实关心可移植性,那么 int 作为原语就是模糊的东西。它们可以在字节数、有符号或无符号以及字节顺序(字节顺序)或这些事物的任何组合方面有所不同。另一方面,字节数组在大多数情况下总是以相同的方式在任何地方表示(“bit-endianness”实际上是不存在的问题。大多数人甚至会说它是一个神话:) 并且可以安全地以标准读取/写入方式。

      【讨论】:

        【解决方案5】:

        因为有一个DataInputStream 类和一个BufferedInputStream 类一起完成了 90% 的工作,并且还涵盖了字节、字符、短裤、长整数、浮点数和双精度数,而无需添加 N 个课程。

        您不必为所需的每个功能都添加一个类。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多