2012-05-08 1 views
3

Объясните мне, пожалуйста, почему кодеры Google не называют метод flush()?Почему com.google.protobuf.CodedOutputStream метод flush не вызывает output.flush() внутри?

/** 
    * Flushes the stream and forces any buffered bytes to be written. This 
    * does not flush the underlying OutputStream. 
    */ 
    public void flush() throws IOException { 
     if (output != null) { 
      refreshBuffer(); 
     } 
    } 

Есть ли скрытые причины для этого?

+0

Зачем им это называть? refreshBuffer, похоже, делает трюк. – Zecas

+0

Вам придется спросить авторов. – EJP

ответ

0

Потому что вы можете не захотеть очистить базовый поток. Например, вы можете только очистить CodedOutputStream, чтобы вы могли безопасно записать некоторые другие данные в базовый OutputStream и убедиться, что они заканчиваются записью после данных CodedOutputStream. В этом случае вы, возможно, не захотите записывать данные в базовый файл или сокет, потому что это более эффективно для пакетной обработки данных.

+3

В этом случае для этой цели должен быть предусмотрен другой метод. FilterOutoutStream.flush() очищает вложенный поток: это нормальное ожидание. – EJP