2016年9月28日 星期三

ByteArrayOutputStream - Java - close 後可取出資料的OutputStream

ByteArrayOutputStream繼承OutputStream,但跟平常看到的例如FileOutputStream、ServletOutputStream等不同,它是可以在資料輸出至OutputStream後、甚至在被close()後,還可以將資料取回的一種OutputStream,例如可用其擁有的方法,toByteArray(),來取得byte[]型別的資料。

例如以之前的文章為例,使用Java製作GIF動畫 - AnimatedGifEncoder,其中
OutputStream o = response.getOutputStream();
AnimatedGifEncoder encoder = new AnimatedGifEncoder();
encoder.start(o);
o.flush();
o.close();

也可寫成:

ByteArrayOutputStream oo = new ByteArrayOutputStream();
AnimatedGifEncoder encoder = new AnimatedGifEncoder();
encoder.start(oo);  //
/* some code */
oo.flush();
oo.close();

byte[] gif_btyeArray = oo.toByteArray();
/* you can do something with gif_byteAray */
OutputStream o = response.getOutputStream();
o.write(gif_btyeArray );
o.flush();
o.close();

可以看到我們先把輸出的資料先送到ByteArrayOutputStream裡,在其close()後,還可以利用ByteArrayOutputStream的toByteArray()取回資料,對資料做想要的處理之後,再送給ServeltOutputSteam

參考資料:
  1. java.ByteArrayInputStream与ByteArrayOutputStream再次理解http://blog.csdn.net/rcoder/article/details/6118313
  2. How can we read or use the contents of outputstream [closed]

沒有留言 :

張貼留言