为啥没有 IntegerArrayInputStream 类? [关闭]

Posted

技术标签:

【中文标题】为啥没有 IntegerArrayInputStream 类? [关闭]【英文标题】: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(零)? 【参考方案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 个课程。

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

【讨论】:

以上是关于为啥没有 IntegerArrayInputStream 类? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我没有 NotSerializableException?

为啥 tableviewcell 没有更新?

为啥没有播放声音?

为啥这个函数序言中没有“sub rsp”指令,为啥函数参数存储在负 rbp 偏移处?

为啥这个函数序言中没有“sub rsp”指令,为啥函数参数存储在负 rbp 偏移量?

为啥没有调用 didDeselectRowAtIndexPath