У меня есть большой файл, на котором я открываю FileInputStream. Этот файл содержит некоторые файлы, каждый из которых имеет смещение от начала и размера. Кроме того, у меня есть парсер, который должен оценивать такой файл.Хороший дизайн: как передать InputStreams в качестве аргумента?
File file = ...; // the big file
long offset = 1734; // a contained file's offset
long size = 256; // a contained file's size
FileInputStream fis = new FileInputStream(file);
fis.skip(offset);
parse(fis, size);
public void parse(InputStream is, long size) {
// parse stream data and insure we don't read more than size bytes
is.close();
}
Я чувствую, что это не хорошая практика. Есть ли лучший способ сделать это, возможно, используя буферизацию?
Кроме того, я чувствую, что метод skip() замедляет процесс чтения.
Пробовал подкласс FileInputStream для создания пользовательского InputStream для моего случая. Похоже, что FIS ищет символ EOF, которого на самом деле нет. Я проверил его в SVN: http://code.google.com/p/mtmx/source/browse/code/core/trunk/mtmx.file/src/mtmx/file/internal/SubFileInputStream.java – 2008-12-14 20:57:05
I не будет подкласса FileInputStream - я бы подклассифицировал только InputStream, поэтому вы можете создать частичный поток из * любого * входного потока. – 2008-12-14 21:20:00