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>