Как хранить байты и читать их обратно в массив - PullRequest
0 голосов
/ 01 августа 2011

Я пытаюсь сохранить список чисел (байтов) в файле, чтобы я мог извлечь их в байт [].

59 20 60 21 61 22 62 23 63 24 64 25 65 26 66 27 67 28 68 29 
67 30 66 31 65 32 64 33 63 34 62 35 61 36 60 37 59 38
66 29 65 30 64 31 63 32 62 33 61 34 60 35 59 36 58 37
65 28 64 29 63 30 62 31 61 32 60 33 59 34 58 35 57 36...

Я пытался сохранить их в текстовый файл, но соответствующий код, похоже, не читает его правильно.

    try {
        File f = new File("cube_mapping2.txt");
        array = new byte[file.size()]
        FileInputStream stream = new FileInputStream(f);
        stream.read(array);
    } catch (Exception e) {
        e.printStackTrace();
    }

Есть ли правильный способ сохранить файл, чтобы FileInputReader.read(byte[] buffer) заполнял массив моими байтами?

Ответы [ 3 ]

3 голосов
/ 01 августа 2011

Я бы использовал Сканер .Примерно так:

public static void main(String[] args) throws IOException {
    InputStream stream = new FileInputStream("cube_mapping2.txt");
    Scanner s = new Scanner(stream);
    List<Byte> bytes = new ArrayList<Byte>();
    while (s.hasNextByte()) {
        bytes.add(s.nextByte());
    }
    System.out.println(bytes);
}

Я проверил это на файле, содержащем ваши точные данные, и это сработало.Вывод был:

[59, 20, 60, 21, 61, 22, 62, 23, 63, 24, 64, 25, 65, 26, 66, 27, 67, 28, 68, 29, 67, 30, 66, 31, 65, 32, 64, 33, 63, 34, 62, 35, 61, 36, 60, 37, 59, 38, 66, 29, 65, 30, 64, 31, 63, 32, 62, 33, 61, 34, 60, 35, 59, 36, 58, 37, 65, 28, 64, 29, 63, 30, 62, 31, 61, 32, 60, 33, 59, 34, 58, 35, 57, 36]
2 голосов
/ 01 августа 2011

FileInputStream работает с двоичными файлами.Код, который вы разместили, будет читать из двоичного файла, но это не совсем правильно, потому что stream.read (массив) читает от до длины массива;он не обещает прочитать весь массив.Возвращаемое значение из read (array) - количество фактически прочитанных байтов.Чтобы быть уверенным в получении всех нужных вам данных, необходимо, чтобы вызов read () был в цикле.

Чтобы ответить на ваш актуальный вопрос: записать в файл таким образом, чтобы stream.read (array)) сможет прочитать его обратно, используйте FileOutputStream.write (массив).

Если вы довольны текстовым файлом вместо двоичного, используйте ответ @ Bohemian.

0 голосов
/ 01 августа 2011
array = new byte[file.size()]

Это означает, что не осталось места для хранения отдельной метки для каждых двух чисел?Согласно вашему байтовому массиву, если каждый из них содержит только два пробела, вы можете использовать временный байтовый массив из двух пробелов для чтения каждого байта, который вы храните в своем файле.Что-то вроде

byte[] temp = new byte[2];
stream.read(temp);

, что может обеспечить чтение байта номер один за другим.

...