GZipping от стандартного ввода до стандартного вывода в Java - PullRequest
0 голосов
/ 25 октября 2011

Предисловие: Я полный нуб Java ... Я только что написал Hello World вчера. Смилуйся над собой.

Я не уверен, как читать со стандартного ввода или вывода на стандартный вывод в Java. Я знаю, что есть такие вещи, как сканеры и System.out.println, но, похоже, это не относится непосредственно к тому, что я пытаюсь сделать.

В частности, я пытаюсь использовать GZip на стандартном вводе и выводить сжатый результат на стандартный вывод. Я вижу, что есть класс GZipOutputStream , который я непременно захочу использовать. Тем не менее, как я могу инициализировать выходной поток для прямого вывода на стандартный вывод? Далее, как я могу просто читать со стандартного ввода?

Как мне это сделать? Как мне сжать ввод std и вывести результат на вывод std?

(Вот схема того, что я пытаюсь выполнить: ввод Std -> GZIP (через мою программу Java) -> вывод std (сжатая версия ввода std)

Ответы [ 2 ]

3 голосов
/ 26 октября 2011

Посмотрите на следующий конструктор: GZIPInputStream(InputStream in). Чтобы получить стандартный ввод 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 имеют крутую кривую обучения, поэтому я рекомендую прочитать любое учебное пособие онлайн.

Я оставлю это как упражнение, чтобы выяснить результат.

- Отказ от ответственности: на самом деле не пробовал код

0 голосов
/ 26 октября 2011
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();

    }
}
...