#java #io #gzip #stdout #stdin
#java #io #gzip #стандартный вывод #stdin
Вопрос:
Предисловие: я полный новичок в Java … я только вчера написал Hello World. Помилуй моего новичка.
Я не уверен, как читать со стандартного ввода или вывода на стандартный вывод в Java. Я знаю, что есть такие вещи, как сканеры и System.out.println, но, похоже, это не относится непосредственно к тому, что я пытаюсь сделать.
В частности, я пытаюсь использовать GZip для стандартного ввода и вывода сжатого результата в стандартный вывод. Я вижу, что существует класс GZIPOutputStream, который я, безусловно, захочу использовать. Однако, как я могу инициализировать поток вывода для прямого вывода std? Кроме того, как я могу просто читать со стандартного ввода?
Как я могу это сделать? Как мне сжать ввод std и вывести результат в вывод std?
(Вот схема того, чего я пытаюсь достичь: Std-ввод -> GZIP (через мою Java-программу) -> std-вывод (сжатая версия std-ввода)
Ответ №1:
Взгляните на следующий конструктор : GZIPInputStream(InputStream in)
. Чтобы получить stdin в качестве InputStream
, используйте System.in
. Чтение из потока выполняется с read(byte[] buf, int off, int len)
помощью метода — взгляните на документацию для подробного описания. Все это было бы что-то вроде
GZIPInputStream i = new GZIPInputStream(System.in);
byte[] buffer = new byte[1024];
int n = i.read(buffer, 0,buffer.length)
System.out.println("Bytes read: " n);
Лично я обнаружил, что потоки в Java имеют крутую кривую обучения, поэтому я рекомендую прочитать любой онлайн-учебник.
Я оставлю это как упражнение для определения результата.
— Отказ от ответственности: на самом деле не пробовал код
Комментарии:
1. Это полезно, хотя на самом деле я не использую GZIPInputStream, поскольку мне не нужно распаковывать ввод.
2. Вы можете использовать аналогичный подход при создании GZIPOutputStream (System.out).
3. Определенно, именно поэтому я сказал, что это полезно, и дал ему оценку!
Ответ №2:
import java.io.IOException;
import java.util.zip.GZIPOutputStream;
public class InToGzipOut {
private static final int BUFFER_SIZE = 512;
public static void main(String[] args) throws IOException {
byte[] buf = new byte[BUFFER_SIZE];
GZIPOutputStream out = new GZIPOutputStream(System.out);
int len;
while ((len = System.in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.finish();
}
}