Может быть, следующая часть документации по основным типам поможет вам:
На платформе Java числа физически хранятся как примитивные типы JVM, если только нам не требуется обнуляемая ссылка на номер (например, Int?) или генерики. В последних случаях цифры заключены в квадрат.
blockquote>Тогда ваше предположение может быть верным. Попробуйте использовать
Double?
, и все должно быть в порядке.
Это походит на то, что Вы действительно хотите, своего рода "частичный" входной поток - один немного как ZipInputStream, где у Вас есть поток в потоке.
Вы могли записать это сами, проксировав все методы InputStream к исходному входному потоку, вносящему подходящие корректировки для смещения и проверяющему на чтение мимо конца субфайла.
Это - вид вещи, о которой Вы говорите?
Во-первых, 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
}
Это, конечно, плохо в том смысле, что это привело бы к созданию новых объектов все время, которые могут закончить тем, что ели много ресурсов. Хорошая сторона этого, конечно, что поток будет закрыт, даже если код обработки файла выдаст исключение.
Это кажется, что типичный вложенный файл иначе "архивирует" проблему файла.
Распространенный способ обработать это состоит в том, чтобы на самом деле иметь отдельный экземпляр InputStream для каждого вложенного логического потока. Они выполнили бы необходимые операции на базовом phsycial потоке, и буферизация может быть и на базовом потоке и на логическом потоке, в зависимости от который иски лучше всего. Это означает, что логический поток инкапсулирует всю информацию о размещении в базовом потоке.
Вы могли forinstance иметь своего рода метод фабрики, который имел бы подпись как это:
List<InputStream> getStreams(File inputFile)
Вы могли сделать то же с OutputStreams.
Существуют некоторые детали к этому, но это может быть достаточно для Вас?
В целом код, который открывает файл, должен закрыть файл - синтаксический анализ (), функция не должна закрывать входной поток, так как это имеет предельное высокомерие для него, чтобы предположить, что остальная часть программы не захочет продолжать читать другие файлы, содержавшиеся в большом.
Необходимо решить, должен ли интерфейс для парсинга () быть просто потоком и длиной (с функцией, которая в состоянии предполагать, что файл правильно расположен), или должен ли интерфейс включать смещение (так функциональные первые положения, и затем читает). Оба проекта выполнимы. Я был бы склонен позволить синтаксическому анализу (), делают расположение, но это не ясное решение.
Вы могли использовать класс обертки на RandomAccessFile - пробуют это
Вы могли также попытаться перенести это в BufferedInputStream и видеть, улучшается ли производительность.