2014-08-29 49 views
1

形成的BufferedWriter以文件的字節我有一個BufferedWriter如下圖所示:計數書面通過由GZIPOutputStream

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
     new GZIPOutputStream(hdfs.create(filepath, true)))); 

String line = "text"; 
writer.write(line); 

我想找出寫入到文件,從查詢文件中像

hdfs = FileSystem.get(new URI("hdfs://localhost:8020"), configuration); 

filepath = new Path("path"); 
hdfs.getFileStatus(filepath).getLen(); 
字節

,因爲它會增加開銷,我不想那樣。由於它在壓縮之前給大小

line.getBytes().length; 

而且我不能做到這一點。

+0

聽起來像你想要某種Java ['tee'](http://www.frischcode.com/2013/11/need-to-write-same-content-to-multiple的.html)。 – 2014-08-29 15:10:52

回答

1

您可以使用Apache的公地IO庫CountingOutputStream

將它放在GZIPOutputStream和文件Outputstream(hdfs.create(..))之間。

將內容寫入文件後,您可以從CountingOutputStream實例中讀取寫入的字節數。

0

你可以讓你自己的OutputStream後裔和計數write方法多少時間調用

1

如果這還不算晚,你正在使用1.7+,你不wan't像GuavaCommons-IO整個庫拉,你可以從相關Deflater延長GZIPOutputStream和獲取數據像這樣:

public class MyGZIPOutputStream extends GZIPOutputStream { 

    public GZIPOutputStream(OutputStream out) throws IOException { 
     super(out); 
    } 

    public long getBytesRead() { 
     return def.getBytesRead(); 
    } 

    public long getBytesWritten() { 
     return def.getBytesWritten(); 
    } 

    public void setLevel(int level) { 
     def.setLevel(level); 
    } 
}