Во-первых, FileInputStream.skip () содержит ошибку , из-за которой файл внизу может пропустить за пределы маркера EOF файла, так что будьте осторожны с этим.
Я лично считаю, что работа с Input / OutputStreams - это боль по сравнению с использованием FileReader и FileWriter, и вы показываете основную проблему, с которой я столкнулся: необходимость закрывать потоки после использования. Одна из проблем заключается в том, что вы никогда не сможете быть уверены, что правильно закрыли все ресурсы, если не сделаете код слишком осторожным, как это:
public void parse(File in, long size) {
try {
FileInputStream fis = new FileInputStream(in);
// do file content handling here
} finally {
fis.close();
}
// do parsing here
}
Это, конечно, плохо в том смысле, что это приведет к постоянному созданию новых объектов, которые могут в конечном итоге съесть много ресурсов. Хорошей стороной этого является, конечно, то, что поток закроется, даже если код обработки файла выдает исключение.