2009-12-27 2 views
0

Если я вызываю writeUTF (String) на объект DataOutput, есть ли способ узнать, сколько байтов было написано на самом деле?Могу ли я определить, сколько байтов было записано через DataOutput.writeUTF?

т.д .:

public int write(DataOutput output) throws IOException { 
    output.writeUTF(this.messageString); 
    int numberOfBytesWritten = ???; 
    return numberOfBytesWritten; 
} 

Единственный метод, который приходит на ум, чтобы создать DataOutputStream, написать строку, что и проверить размер, а затем переписать строку на фактический выпуск продукции. Но это кажется неэффективным.

ответ

1

Один простой способ - написать String отдельно в DataOutputStream, обертывая ByteArrayOutputStream, затем закройте() он DataOutputStream и получите массив байтовых байт из BAOS и посмотрите, как долго это происходит.

Возможно, было бы проще обернуть собственную реализацию OutputStream, которая переопределяет метод одиночной записи (int b), чтобы просто добавить 1 к внутреннему счетчику классов для каждого вызова, например.

public class MyOS extends OutputStream 
{ 
    private int count = 0; 
    public void write(int b){ count++; } 
    public int getCount() { return count; } 
} 
... 
Смежные вопросы