Java FileInput / OutputStream和ByteBuffer

时间:2015-12-13 20:29:03

标签: java fileinputstream fileoutputstream bytebuffer

如何使用ByteBuffer将整数1432写入FileOutputStream编写的文件中。由于1432占用多个字节,我们不能使用write()方法。 此外,我们如何在以后使用FileInputStream read()方法时返回整数?

我试图使用:

int i = 1432;
byte[] bytesi = ByteBuffer.allocate(4).putInt(i).array();
fileOS.write(bytesi);

但是在阅读文件时:

int e = fileIS.read();
System.out.println(e);
int e1 = fileIS.read();
System.out.println(e1);
int e2 = fileIS.read();
System.out.println(e2);
int e3 = fileIS.read();
System.out.println(e3);

我得到的输出如下:

255
132
201
255

4 个答案:

答案 0 :(得分:2)

由于您使用ByteBuffer从整数生成字节,您也可以将其用于逆转换

byte[] bytes = new byte[4];
fis.read(bytes);
int x = ByteBuffer.wrap(bytes).getInt();

答案 1 :(得分:1)

XY问题。你不需要ByteBuffer,你需要用二进制文件写一个int到一个文件。 DataOutputStream拥有您需要的所有方法,并且已经适用于FileOutputStream.同样DataInputStream已经与FileInputStream.一起使用

答案 2 :(得分:1)

您可以将FileInputStreamFileOutputStream打包到DataInputStream / DataOutputStream,以获取各种数据类型的辅助方法,例如readInt / writeInt

http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html

使用示例:http://www.tutorialspoint.com/java/io/dataoutputstream_writeint.htm

答案 3 :(得分:0)

与上面相同的基本答案,使用ByteBuffer函数但不会乱用你自己的byte []。

ByteBuffer bytesIn = ByteBuffer.allocate(4);
fileIS.read(bytesIn.array());
int e = bytesIn.getInt();

您可以/应该这样做以写入字节,例如

int i = 1432;
ByteBuffer bytesOut = ByteBuffer.allocate(4).putInt(test);
outFile.write(bytesOut.array());