I summarize what issue 37 is. When reading a Memo file, the current code tries to emulate a random access with the following method:
mark the stream (8192 bytes) once
for each read:
reset the stream
skip n bytes
read k bytes.
This method is fragile:
the mark may be insufficient
"InputStream.skip() method may skip fewer bytes than requested" (pointed by wescleveland56)
We need a real random access, but with a low memory footprint (= without loading the whole file in memory: see issue #5 and commit d99575c40bf51fdafcdf245b63084dec0b675485) and with a good speed. This PR proposes to use a MappedByteBuffer (see https://www.codeproject.com/Tips/683614/10-Things-to-Know-about-Memory-Mapped-File-in-Java) to let the OS deal with the disk accesses, rather than a plain RandomAccessFile.
Note 1: no speed tests made.
Note 2: I updated .gitignore to remove noise from Eclipse or Intellij...
I summarize what issue 37 is. When reading a Memo file, the current code tries to emulate a random access with the following method:
This method is fragile:
We need a real random access, but with a low memory footprint (= without loading the whole file in memory: see issue #5 and commit d99575c40bf51fdafcdf245b63084dec0b675485) and with a good speed. This PR proposes to use a
MappedByteBuffer
(see https://www.codeproject.com/Tips/683614/10-Things-to-Know-about-Memory-Mapped-File-in-Java) to let the OS deal with the disk accesses, rather than a plain RandomAccessFile.Note 1: no speed tests made. Note 2: I updated .gitignore to remove noise from Eclipse or Intellij...