为啥没有 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?
为啥这个函数序言中没有“sub rsp”指令,为啥函数参数存储在负 rbp 偏移处?