Хороший дизайн: Как передать InputStreams как аргумент?

Может быть, следующая часть документации по основным типам поможет вам:

На платформе Java числа физически хранятся как примитивные типы JVM, если только нам не требуется обнуляемая ссылка на номер (например, Int?) или генерики. В последних случаях цифры заключены в квадрат.

blockquote>

Тогда ваше предположение может быть верным. Попробуйте использовать Double?, и все должно быть в порядке.

6
задан rajadilipkolli 16 January 2018 в 12:31
поделиться

5 ответов

Это походит на то, что Вы действительно хотите, своего рода "частичный" входной поток - один немного как ZipInputStream, где у Вас есть поток в потоке.

Вы могли записать это сами, проксировав все методы InputStream к исходному входному потоку, вносящему подходящие корректировки для смещения и проверяющему на чтение мимо конца субфайла.

Это - вид вещи, о которой Вы говорите?

5
ответ дан 9 December 2019 в 22:41
поделиться

Во-первых, 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
}

Это, конечно, плохо в том смысле, что это привело бы к созданию новых объектов все время, которые могут закончить тем, что ели много ресурсов. Хорошая сторона этого, конечно, что поток будет закрыт, даже если код обработки файла выдаст исключение.

3
ответ дан 9 December 2019 в 22:41
поделиться

Это кажется, что типичный вложенный файл иначе "архивирует" проблему файла.

Распространенный способ обработать это состоит в том, чтобы на самом деле иметь отдельный экземпляр InputStream для каждого вложенного логического потока. Они выполнили бы необходимые операции на базовом phsycial потоке, и буферизация может быть и на базовом потоке и на логическом потоке, в зависимости от который иски лучше всего. Это означает, что логический поток инкапсулирует всю информацию о размещении в базовом потоке.

Вы могли forinstance иметь своего рода метод фабрики, который имел бы подпись как это:

List<InputStream> getStreams(File inputFile)

Вы могли сделать то же с OutputStreams.

Существуют некоторые детали к этому, но это может быть достаточно для Вас?

2
ответ дан 9 December 2019 в 22:41
поделиться

В целом код, который открывает файл, должен закрыть файл - синтаксический анализ (), функция не должна закрывать входной поток, так как это имеет предельное высокомерие для него, чтобы предположить, что остальная часть программы не захочет продолжать читать другие файлы, содержавшиеся в большом.

Необходимо решить, должен ли интерфейс для парсинга () быть просто потоком и длиной (с функцией, которая в состоянии предполагать, что файл правильно расположен), или должен ли интерфейс включать смещение (так функциональные первые положения, и затем читает). Оба проекта выполнимы. Я был бы склонен позволить синтаксическому анализу (), делают расположение, но это не ясное решение.

1
ответ дан 9 December 2019 в 22:41
поделиться

Вы могли использовать класс обертки на RandomAccessFile - пробуют это

Вы могли также попытаться перенести это в BufferedInputStream и видеть, улучшается ли производительность.

0
ответ дан 9 December 2019 в 22:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: