Чтение файла Java

235
29 сентября 2017, 16:27

Есть файл, размером 141387112 байт, использую ByteBuffer метод getInt(); Получаю первое число, это число = кол-ву точек. Кол-во точек умножаю на 12, по 3 флоат на точку, и по 4 байта на каждый флоат. После считывания и записи в массив следующий getInt должен вернуть мне целочисленное число, но возвращает огроменное число, выходящие за пределы кол-ва. Помогите решить проблему с неправильным считыванием.

try (FileInputStream fin = new FileInputStream(myFile)) {
            //получаем размер файла
            System.out.println("Размер файла: " + fin.available() + " байт");
            //задаем размер для буфера
            byte[] buffer = new byte[fin.available()];
            //считываем и заносим в буфер
            fin.read(buffer, 0, fin.available());
            ByteBuffer bb = ByteBuffer.wrap(buffer);
            count_points = bb.getInt(); // кол-во точек
            bb.order(ByteOrder.LITTLE_ENDIAN);
            Log.w("W","кол-во точек = " + count_points);
            //переводим это кол-во в байты
            count_mul = count_points * 12;
            Log.w("W","кол-во байт которые занимают точки = " + count_mul);
            //обьявляем массив размерностью точек
            mass_vertices = new float[count_points * 3]; //NEW было count_mul стало  count_points * 3
            //Заносим в массив
            int p =0;
            for(int i = 0; i < count_points * 3 ; i ++) {
                mass_vertices[i] = bb.getFloat();
                p+=4;
            }
            bb.order(ByteOrder.BIG_ENDIAN);
            Log.w("W","кол-во цветных точек = " + bb.getInt());
            Log.w("W","кол-во счит байтов = " + p);
            Log.w("W","X = " + mass_vertices[0]);
            Log.w("W","Y = " + mass_vertices[1]);
            Log.w("W","Z = " + mass_vertices[2]);

Лог:

СЧИТЫВАЕМ ФАЙЛ
 I/System.out: 
 Размер файла: 141387112 байт
 W/W: кол-во точек = 793974
 W/W: кол-во байт которые занимают точки = 9527688
 кол-во цветных точек = 70256
 W/W: кол-во счит байтов = 9527688
 W/W: X = 18230.195
 W/W: Y = 21232.865
 W/W: Z = 0.0
 E/E: __________________________________
READ ALSO
Торрент клиент на ндроид [требует правки]

Торрент клиент на ндроид [требует правки]

Подскажите пожалуйста статью о создании торрент клиента на андроид

200
Сокет клиент - сервер

Сокет клиент - сервер

ЗдравствуйтеВопрос возможно глупый

177
Фиксированная коллекция

Фиксированная коллекция

Написал класс коллекции с фиксированным размером и методом для проверки является ли она заполненнойПосмотрите, пожалуйста, все ли здесь...

294
Добавление MaterialTapTargetPrompt в Fragment

Добавление MaterialTapTargetPrompt в Fragment

Какой код использовать для внедрения этой либы в Fragment?

276