天天看點

Java IO: OutputStream

write(byte)方法用于把單個位元組寫入到輸出流中。outputstream的write(byte)方法将一個包含了待寫入資料的int變量作為參數進行寫入。隻有int類型的第一個位元組會被寫入,其餘位會被忽略。(譯者注:寫入低8位,忽略高24位)。

outputstream的子類可能會包含write()方法的替代方法。比如,dataoutputstream允許你利用writeboolean(),writedouble()等方法将基本類型int,long,float,double,boolean等變量寫入。

這是一個outputstream的write()方法例子:

<code>01</code>

<code>outputstream output = </code><code>new</code> <code>fileoutputstream(</code><code>"c:\\data\\output-text.txt"</code><code>);</code>

<code>02</code>

<code>03</code>

<code>while</code><code>(hasmoredata()) {</code>

<code>04</code>

<code>05</code>

<code>    </code><code>int</code> <code>data = getmoredata();</code>

<code>06</code>

<code>07</code>

<code>    </code><code>output.write(data);</code>

<code>08</code>

<code>09</code>

<code>}</code>

<code>10</code>

<code>11</code>

<code>output.close();</code>

這個例子首先建立了待寫入的fileoutputstream。在進入while循環之後,循環的判斷條件是hasmoredata()方法的傳回值。hasmoredata()方法的實作不予展示,請把這個函數了解為:當有剩餘可寫資料時,傳回true,否則傳回false。

outputstream同樣包含了将位元組資料中全部或者部分資料寫入到輸出流中的方法,分别是write(byte[])和write(byte[], int offset, int length)。

write(byte[])把位元組數組中所有資料寫入到輸出流中。

write(byte[], int offset, int length)把位元組資料中從offset位置開始,length個位元組的資料寫入到輸出流。

outputstream的flush()方法将所有寫入到outputstream的資料沖刷到相應的目标媒介中。比如,如果輸出流是fileoutputstream,那麼寫入到其中的資料可能并沒有真正寫入到磁盤中。即使所有資料都寫入到了fileoutputstream,這些資料還是有可能保留在記憶體的緩沖區中。通過調用flush()方法,可以把緩沖區内的資料重新整理到磁盤(或者網絡,以及其他任何形式的目标媒介)中。

當你結束資料寫入時,需要關閉outputstream。通過調用close()可以達到這一點。因為outputstream的各種write()方法可能會抛出io異常,是以你需要把調用close()的關閉操作方在finally塊中執行。這是一個outputstream調用close()的例子:

<code>outputstream output = </code><code>null</code><code>;</code>

<code>try</code><code>{</code>

<code>    </code><code>output = </code><code>new</code> <code>fileoutputstream(</code><code>"c:\\data\\output-text.txt"</code><code>);</code>

<code>    </code><code>while</code><code>(hasmoredata()) {</code>

<code>        </code><code>int</code> <code>data = getmoredata();</code>

<code>        </code><code>output.write(data);</code>

<code>12</code>

<code>13</code>

<code>    </code><code>}</code>

<code>14</code>

<code>15</code>

<code>} </code><code>finally</code> <code>{</code>

<code>16</code>

<code>17</code>

<code>    </code><code>if</code><code>(output != </code><code>null</code><code>) {</code>

<code>18</code>

<code>19</code>

<code>        </code><code>output.close();</code>

<code>20</code>

<code>21</code>

<code>22</code>

<code>23</code>