2015-12-13 8 views
3

Как я могу использовать ByteBuffer для записи целого числа 1432 в файл, написанный FileOutputStream. Поскольку 1432 занимает более одного байта, мы не можем использовать метод write(). Кроме того, как мы можем вернуть целое число, когда позже будем использовать метод ReadInt FileInputStream?Java FileInput/OutputStream и ByteBuffer

Я пытался использовать:

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 
+0

@jonasnas, то сколько байтов будет сохранено? Если я использую fileOS.write (i) – SamW

+0

нормально, понял, что вы имеете в виду. вы имеете в виду, что вы не можете использовать его напрямую – jonasnas

ответ

2

Поскольку вы используете ByteBuffer генерировать байт из целого числа, вы можете использовать его для обратной конверсии тоже

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

XY проблема. Вам не нужно ByteBuffer,, вам нужно написать int в файл в двоичном формате. DataOutputStream имеет все методы, вам нужно, и он уже работает с FileOutputStream. Аналогично DataInputStream уже работает с FileInputStream.

0

Такой же базовый ответ, как указано выше , используя функцию ByteBuffer, но не возиться со своим собственным байтом [].

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());