Нужно ли очищать PrintWriter/PrintStream?

Я хотел бы использовать PrintWriter или PrintStream для записи форматированных строк в выходной поток (для которого я не контролирую создание). Однако очистка базового OutputStream сильно снижает производительность.

Нужно ли сбрасывать PrintWriter / PrintStream.

Если мне нужно очистить PrintStream / PrintWriter; могу ли я сделать это, не очищая базовый поток OutputStream, или мне нужно будет создать OutputStream «защиты сбрасывания», чтобы обернуть базовый поток?

Чтобы попытаться немного прояснить это, я хочу реализовать

 public void writeSomeString(OutputStream foo);

Но этот метод может вызываться много раз для одного и того же OutputStream (foo). Каждый вызов должен будет создать свой собственный PrintWriter. Я знаю, что это некрасиво, но я не могу контролировать интерфейс или создание foo.

Я пытаюсь избежать того, чтобы каждому методу приходилось сбрасывать foo только для того, чтобы сбросить свой собственный PrintWriter/PrintStream.

Итак, я хочу:

public void writeSomeString(OutputStream foo) {
    PrintStream s = new PrintStream(foo);
    s.println("bar");
    // other code
}

Я хочу полностью избежать сброса этого метода foo


person Philip Couling    schedule 17.05.2012    source источник


Ответы (1)


PrintWriter необходимо сбросить в следующих случаях:

ServerSocket s = new ServerSocket(4444);

Socket incoming = s.accept();

OutputStream output = s.getOutputStream();

PrintWriter pw = new PrintWriter(output,true);

System.out.println(pw.write(new Scanner(System.in).nextLine()));

2-й параметр в конструкторе PrintWriter — flush, который принимает логический тип данных, нам нужно сбросить данные, поэтому они выводятся на консоль, даже если буфер не заполнен.

person Kumar Vivek Mitra    schedule 17.05.2012
comment
Да, я думаю, что мне придется смыть его тогда. Я оберну входной поток, чтобы он не сбрасывал базовый OutputStream. Спасибо. - person Philip Couling; 18.05.2012