簡體   English   中英

使用NIO解碼器會導致整個文件被讀取嗎?

[英]Will using NIO decoder cause entire file to be read?

我正在考慮使用Java NIO處理文件並使用解碼器功能來處理不同的字符集。 我擔心的是,如果解碼器在一開始就嘗試讀取整個文件,這可能會導致效率或內存問題。 例如,給定以下代碼(為清晰起見省略了異常處理程序):

Charset charset = Charset.forName( "ISO-8859-15" );
CharsetDecoder decoder = charset.newDecoder();
FileInputStream fis = new FileInputStream( file );
FileChannel fc = fis.getChannel();
int lenFile = (int)fc.size();
MappedByteBuffer bufferFile = fc.map( FileChannel.MapMode.READ_ONLY, 0, lenFile );
CharBuffer cb = decoder.decode( bufferFile ); // <--- possible problem here
// process character buffer
fc.close();

在創建CharBuffer的行中,我擔心的是解碼器會創建一個緩沖區來包含整個文件,其大小可能是千兆字節,從而導致內存問題。 它是否嘗試創建文件大小的緩沖區? 有沒有辦法控制緩沖區的大小?

它並不真正讀取文件,但會將其映射到內存中。 這意味着文件的各個部分按需讀取,然后如果操作系統意識到它已經被訪問了一段時間則被丟棄。

然而,它為輸出分配了巨大的CharBuffer,因為這基本上是處理結果。

在這里,我會考慮實現簡單的while循環 - 讀取字節,調用解碼,刷新當前輸出並重復直到到達文件末尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM