Каждая строка получает одно и то же значение в массиве 2d после присвоения различных значений в java - PullRequest
0 голосов
/ 31 марта 2020

'' '

FileChannel channel = new FileInputStream("test.txt").getChannel();
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0,50000);
    byte[] data = new byte[102];
    byte[][] bufferArray = new byte[(buffer.capacity() / 102)][100];
    int i = 0;
    while (buffer.hasRemaining()) {
        int remaining = data.length;
        if (buffer.remaining() < remaining)
            remaining = buffer.remaining();
        buffer.get(data, 0, remaining);

        bufferArray[i++] = data;
        System.out.println("Value before " + new String(bufferArray[43777]));
        System.out.println("Value before 0 " + new String(bufferArray[0]));
        System.out.println("Value before 100 " + new String(bufferArray[100]));
    }
    System.out.println("Value after 0 " + new String(bufferArray[0]));
    System.out.println("Value after 100 " + new String(bufferArray[100]));
    System.out.println("Value after 43777 " + new String(bufferArray[43777]));

' '' * Значения до отличаются, но значения после все одинаковые * буфер - это MappedByteBuffer, считывающий из текстового файла

1 Ответ

0 голосов
/ 31 марта 2020

Переместить инициализацию массива данных в l oop. Оставляя его вне кода, он постоянно перезаписывает одну и ту же память

FileChannel channel = new FileInputStream("test.txt").getChannel();
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0,50000);
    byte[] data;
    byte[][] bufferArray = new byte[(buffer.capacity() / 102)][100];
    int i = 0;
    while (buffer.hasRemaining()) {
        data = new byte[102];
        int remaining = data.length;
        if (buffer.remaining() < remaining)
            remaining = buffer.remaining();


        buffer.get(data, 0, remaining);
        bufferArray[i++] = data;
        System.out.println("Value before " + new String(bufferArray[43777]));
        System.out.println("Value before 0 " + new String(bufferArray[0]));
        System.out.println("Value before 100 " + new String(bufferArray[100]));
    }
    System.out.println("Value after 0 " + new String(bufferArray[0]));
    System.out.println("Value after 100 " + new String(bufferArray[100]));
    System.out.println("Value after 43777 " + new String(bufferArray[43777]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...