Существует ли краткий способ создать InputSupplier для InputStream в Google Guava?

Существует несколько методов фабрики в Google Guava для создания InputSuppliers, например, от a byte[]:

ByteStreams.newInputStreamSupplier(bytes);

Или от a File:

Files.newInputStreamSupplier(file);

Есть ли похожий способ к создать InputSupplier для данного InputStream?

Таким образом, путь это более кратко, чем анонимный класс:

new InputSupplier<InputStream>() {
    public InputStream getInput() throws IOException {
        return inputStream;
    }
};

Фон: я хотел бы использовать InputStreams с, например. Files.copy(...) или ByteStreams.equal(...).

17
задан Fabian Steeg 2 March 2010 в 13:35
поделиться

2 ответа

Нет, я ничего не видел.
Думаю, вы нашли лучший способ.
Единственная альтернатива, где сохранить входной поток в байтовом массиве или файле и создать поставщика с помощью ByteStreams.newInputStreamSupplier () или Files.newInputStreamSupplier (), но я бы не рекомендовал делать это.
Вы также можете использовать

public static long copy(InputStream from, OutputStream to)
из
ByteStreams
см. src
10
ответ дан 30 November 2019 в 13:12
поделиться

Это было бы так же неправильно, как обернуть Iterator в Iterable, я чувствую, что вероятность того, что такая вещь попадет в библиотеку, равна нулю. Как говорит elou, вы можете использовать метод ByteStreams.copy(), но не похоже, что есть очевидная причина делать equals() для двух потоков.

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

2
ответ дан 30 November 2019 в 13:12
поделиться
Другие вопросы по тегам:

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