Как использовать Intbuffer с FileChanel с RandomAccessFile?

181
27 декабря 2018, 03:00

Нужно записать строку, для этого использую FileChanel and IntBuffer, чтобы скорость записи была высокой, но получаю ошибку Exception in thread "main" java.nio.BufferOverflowException - позиция больше лимита, но почему так происходит? И код:

public void write(String string) throws IOException {
    FileChannel fc = new RandomAccessFile(
            new File(FILE_NAME), MODE_RW).getChannel();
    IntBuffer ib = fc.map(
            FileChannel.MapMode.READ_WRITE, 0, fc.size()).asIntBuffer();
    for (int i = 0; i < string.toCharArray().length; i++) {
        ib.put(string.toCharArray()[i]);
    }
    fc.close();
}
Answer 1

Сделал немного по иному, но скорость все равно не снизилась.

public void write(String path, String string) throws IOException {
    FileChannel ch = setFileChanel(path, MODE_RW);
    ch.write(setByteBuffer(string));
    ch.close();
}
private FileChannel setFileChanel(String path, String mode) throws FileNotFoundException {
    return new RandomAccessFile(new File(path), mode).getChannel();
}
private ByteBuffer setByteBuffer(String string){
    return ByteBuffer.wrap(string.getBytes());
}
READ ALSO
Как реализовать multi touch (appium)

Как реализовать multi touch (appium)

Хочу реализовать мультитач в моб тестированииС документации appium взял код, подключил библиотеки (указанные на сайте):

197
Передать реферер интентом

Передать реферер интентом

Открываю страничку таким кодом:

228
Изменение атрибутов в Active Directory

Изменение атрибутов в Active Directory

Есть АД с 1000 пользователей, атрибуты к примеру как: имя, организация, город уже заполнены, есть excel файл с еще одним атрибутомВопрос как внести...

192
Обработка нажатия кнопки JavaFX

Обработка нажатия кнопки JavaFX

Есть код, парсер веб страницы, в консоль информация выдается в текстовом формате (не в виде html кода), и я хочу, чтобы эта информация появлялась...

271