2015-12-12 2 views
2

Во-первых, я использую FileOutputStream для записи большого числа в файл.Чтение файла с использованием FileInputStream

например.

int a = 2051741; 
fileA.write(a); 

Затем, когда я использую FileInputStream для чтения данных.

например.

int b = fileA.read(); 

Когда я распечатай b, это было бы что-то маленькое, как 112

Почему это происходит? Как я могу узнать исходное целое число?

+2

Вы пишете байт не int. – WalterM

+0

http://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html#write-int-, http://docs.oracle.com/javase/8/docs/api/ Java/IO/InputStream.html # read-- –

ответ

2

public void write(int b) throws IOException

Пишет указанный байт в этот выходной файл потока. Реализует метод записи OutputStream.

Вам необходимо украсить ваш OutputStream другим типом OutputStream, который его поддерживает. т.е. DataOutputStream

DataOutputStream out = new DataOutputStream(new FileOutputStream("MyFile.txt")); 
    out.writeInt(20); 
    out.writeInt(53432542); 
    out.writeLong(5234843258938L); 
    out.close(); 

    DataInputStream in = new DataInputStream(new FileInputStream("MyFile.txt")); 
    System.out.println(in.readInt()); 
    System.out.println(in.readInt()); 
    System.out.println(in.readLong()); 
    in.close(); 
0

FileInputStream и FileOutputStream обрабатывает байт данных. Более конкретно, read() читает один байт, а write(int) записывает байт.

Javadoc из OutputStream.write(int) говорит:

Записывает указанный байт в этот выходной поток. Общий контракт на запись состоит в том, что один байт записывается в выходной поток. Байтом, который должен быть записан, является восемь младших бит аргумента b. 24 старших бита b игнорируются.

Это означает, что когда вы даете значение int, 24 старших бита бит игнорируются. Принимая ваш аргумент 2051741, сбросив 24 бита высокого порядка, вы доходите до 2051741 & 0xFF = 157.

Это то, что вы в конечном итоге читаете: небольшое число, например 157.

0

Вы можете использовать Scanner для чтения содержимого вашего файла:

Scanner s = new Scanner(file) 
int b = s.nextInt(); 
System.out.print(b); 

Это для чтения одного значения из файла, вот подход к времени, когда ваш файл имеет более чем одно значение:

while(s.hasNext()){ 
     int b[i] = s.nextInt(); 
     i++; 
     } 
    for(int x:b) 
    System.out.print(b); 

Вы также можете использовать методы, такие как nextBigInteger() для больших значений integer.

Смежные вопросы