将int数组转换为byte数组的最有效方法是什么,反之亦然?

时间:2014-07-31 15:05:09

标签: java arrays file-io int byte

我正在寻找将int数组转换为byte数组的最有效方法,反之亦然。

我想在文件中写入大量int数组和字符串,以便有效地阅读它们。我认为节省空间和减少阅读时间的最佳方法是将它们存储为byte我是对的吗?

我阅读了以下链接,但还有更好的方法吗?

Convert integer into byte array (Java)

4 个答案:

答案 0 :(得分:4)

整数到字节

我认为没有比直接移位字节/位更好或更有效的方法。

您可能需要遍历您链接的question中提到的toBytes(..)方法:

byte[] toBytes(int i)
{
  byte[] result = new byte[4];

  result[0] = (byte) (i >> 24);
  result[1] = (byte) (i >> 16);
  result[2] = (byte) (i >> 8);
  result[3] = (byte) (i /*>> 0*/);

  return result;
}

像这样:

for (int i = 0; i < integers.length; i++)
{
   bytes[i] = toBytes(integers[i]);
}

字节到整数

对于整数字节,您可以进行简单的乘法和添加,这可能是最快的。类似的东西:

for (int i = 0; i < integers.length; i++)
{
   integers[i] = ((int) (bytes[i] << 24)) + ((int) (bytes[i+1] << 16)) + ((int) (bytes[i + 2] << 8)) + ((int) (bytes[i + 3]));
}

另见

答案 1 :(得分:2)

关于效率,要写入和读取的文件的大小将决定使用哪种方法。您可能只需要运行一些定时测试,看看哪种方法最适合您正在做的事情。

另一个选项(对于较小的文件)是使用Files.readAllBytes()Files.write()

答案 2 :(得分:2)

在Java中,byte是8位,而int是32位。

要将每个int转换为单个byte 而不丢失数据,您需要确保所有数字都在-128到127之间(包括

如果他们 在这个范围内,那么你应该将它们作为字节存储在第一位(如果这不可能,有办法进行转换已经讨论过了。)

如果它们不在此范围内,那么您根本不应将它们转换为字节,因为它会强制您的数字进入范围,因此您将丢失大量数据。

或者,你可以使用short,因为它是16位(给你的范围是-32,768到32,767)。

但是,如果您无法确保您的号码在这些范围内,那么您需要使用int


注意:您可以将每个int存储为4 byte s或2 short s,但每个数字仍为32位,因此您和#39;这样做不会获得任何空间效率。


You can read more about Java's primitive types here

答案 3 :(得分:1)

Java提供了一个API,可以更有效地为您完成这项工作。看看http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html。此外,如果您不想使用其他应用程序打开文件,另一种有效的解决方案是使用http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html来序列化整个对象,而无需手动转换。

另外,请检查以下答案:Fastest way to write an array of integers to a file in Java?