Чтение целого числа из файла bin делает модуль (256) на число, которое больше 256 - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь прочитать числа из файла bin, когда он достигает числа, которое больше 256, он выполняет модуль (256) для этого числа, например: число, которое я пытаюсь прочитать258, число, которое было прочитано из файла: (2) => 258mod256 = 2, как я могу прочитать полное число?Это фрагмент кода:

InputStream ReadBinary = new BufferedInputStream(new FileInputStream("Compressed.bin"));
    int BinaryWord = 0;
    while(BinaryWord != -1) {
        BinaryWord = ReadBinary.read();
        if(BinaryWord != -1)
        System.out.println(BinaryWord + ": " + Integer.toBinaryString(BinaryWord));

Код для записи файла:

        DataOutputStream binFile = new DataOutputStream(new FileOutputStream("C:\\Users\\George Hanna\\eclipse-workspace\\LZW\\Compressed.bin"));
    //convert codewords to binary to send them.
    for(int i=0;i<result.size();i++)
        try {
            IOFile.print(Integer.toBinaryString(result.get(i))+ " ");
            binFile.writeByte(result.get(i));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    binFile.close();

1 Ответ

0 голосов
/ 10 июня 2019

Просто чтобы немного рассказать о том, как хранятся целые числа:

Чтобы подвести итогВаш файл состоит из байтов .Каждый байт имеет значение от 0 до 255.

Для представления 32-битного целого необходимо 4 байта.

В Java есть int (4 байта) и long (8 байтов).

Самый простой способ хранить данные в двоичном файле - это DataOutputStream, а читать его DataInputStream.Он будет обрабатывать все эти преобразования для вас.

DataOutputStream out = new DataOutputStream(new FileOutputStream("intFile.bin"));
out.writeInt(123456789);
out.close();

DataInputStream in = new DataInputStream(new FileInputStream("intFile.bin"));
System.out.println(in.readInt());
in.close();

Чтобы получить отдельные байты из файла, сделайте следующее:

InputStream in_bytes = new FileInputStream("intFile.bin");
int nextByte = in_bytes.read();
while(nextByte != -1) {
    System.out.println(nextByte);
    nextByte = in_bytes.read();
}
in_bytes.close();

Чтобы записать в файл отдельные байты, сделайте следующее:

OutputStream out_bytes = new FileOutputStream("intFile.bin");
out_bytes.write(1);
out_bytes.write(2);
out_bytes.write(3);
out_bytes.write(4);
out_bytes.close();

Но, как вы уже поняли, здесь вы пишете байты, и поэтому вы ограничены диапазоном от 0 до 255.

...