c2 Streams - Output Streams
2014-04-07 17:22
381 查看
网络程序大部分所做的是不外乎读取和写入,倒腾Bytes,从一个系统到另一个系统,client接受Server发回的数据和读取一个文件没啥两样,server给client发送数据和写入文件也没啥区别。然而java对 I/O 的处理和大部分其他语言c,c++等区别还是很多的。
当一个流建立以后,你可以忽略一些细节,比如你到底读或者写的是什么。
Filter stream 可以链接 input stream和output stream,可以对它读取、写入的数据做修改,比如加密,压缩,改变格式等,比如类DataOutputStream。
Reader和Writer是字符流,可以处理text(character)而不是bytes。可以I/O提高效率。
Stream是同步的,当一个程序(实际上是一个Thread)读取写入数据时,在流完成读取写入操作前是不会干其他任何事情的。java也提供了非阻塞的 I/O ,用channels和buffers,非阻塞式的更快但也更复杂,常用于“高容量”的web 服务器上。客户端的话用标准的Stream就可以了。另外channel和buffer也是基于Stream的。
该方法中要求int b的范围是0-255,因为这里只对int b的低8位取值,高24被舍弃。虽然这里参数是int型的,但实际上需要的是一个无符号的byte型的,由于java里没有无符号的byte,就用int来代替了。(p26)
字节到底是个什么玩意,有符号与无符号的区别在哪里?
在使用BufferedOutputStream或者BufferedWriter时,记得flush(),否则,你认为发出去了在等回应,而BufferedOutputStream认为它的缓冲区还没满,在等你继续写入,而另一端呢还在等你消息,从而陷入deadLock。
flush()操作的开销是非常低,为了不必要的麻烦,在close一个stream前要先flush,否则遇上有buffer的stream,你close了但没flush,那在buffer中的数据就可能会lost。
当使用完了一个stream,调用close()方法关闭它,close后会关闭所有与之有关的资源,比如文件句柄或端口,如果是联网的流,会关闭网络连接(程序中的资源是指:内存、端口,带宽、cpu使用啊等)。一般close后,再write会包IOException,但有些流还允许对其操作,ByteArrayOutputStream、DigestOutputStream。
在jdk7之前,要对资源显式释放,
jdk7对try block中的argument list中的AutoClosable 对象会自动close,finally clause就不再需要了。
当一个流建立以后,你可以忽略一些细节,比如你到底读或者写的是什么。
Filter stream 可以链接 input stream和output stream,可以对它读取、写入的数据做修改,比如加密,压缩,改变格式等,比如类DataOutputStream。
Reader和Writer是字符流,可以处理text(character)而不是bytes。可以I/O提高效率。
Stream是同步的,当一个程序(实际上是一个Thread)读取写入数据时,在流完成读取写入操作前是不会干其他任何事情的。java也提供了非阻塞的 I/O ,用channels和buffers,非阻塞式的更快但也更复杂,常用于“高容量”的web 服务器上。客户端的话用标准的Stream就可以了。另外channel和buffer也是基于Stream的。
public abstract void write(int b) throws IOException;
该方法中要求int b的范围是0-255,因为这里只对int b的低8位取值,高24被舍弃。虽然这里参数是int型的,但实际上需要的是一个无符号的byte型的,由于java里没有无符号的byte,就用int来代替了。(p26)
字节到底是个什么玩意,有符号与无符号的区别在哪里?
在使用BufferedOutputStream或者BufferedWriter时,记得flush(),否则,你认为发出去了在等回应,而BufferedOutputStream认为它的缓冲区还没满,在等你继续写入,而另一端呢还在等你消息,从而陷入deadLock。
flush()操作的开销是非常低,为了不必要的麻烦,在close一个stream前要先flush,否则遇上有buffer的stream,你close了但没flush,那在buffer中的数据就可能会lost。
当使用完了一个stream,调用close()方法关闭它,close后会关闭所有与之有关的资源,比如文件句柄或端口,如果是联网的流,会关闭网络连接(程序中的资源是指:内存、端口,带宽、cpu使用啊等)。一般close后,再write会包IOException,但有些流还允许对其操作,ByteArrayOutputStream、DigestOutputStream。
在jdk7之前,要对资源显式释放,
OutputStream out = null; try { out = new FileOutputStream("/tmp/data.txt"); // work with the output stream... } catch (IOException ex) { System.err.println(ex.getMessage()); } finally { if (out != null) { try { out.close(); } catch (IOException ex) { // ignore } } }
jdk7对try block中的argument list中的AutoClosable 对象会自动close,finally clause就不再需要了。
try (OutputStream out = new FileOutputStream("/tmp/data.txt")) { // work with the output stream... } catch (IOException ex) { System.err.println(ex.getMessage()); }
相关文章推荐
- c2 Streams - Input Stream
- c2 Streams Readers and Writers
- [Oracle Streams] 初步实验Oracle Streams
- LifeStreams+FriendStreams:你的切片之不同玩法
- LifeStreams+FriendStreams:你的切片之不同玩法
- .NET FileStreams将DTD插入XML文件中
- 文件和流(Files and Streams)之 DirectoryInfo类和FileInfo
- knllgobjinfo: MISSING Streams multi-version data dictionary!!! 的处理
- Streams Replication Practice: Schema Level
- Streams跨平台、跨版本是可行的,但实现机制不同
- 一步一步学Streams 第一部分(1)基础之概述篇
- 一步一步学Streams:第二部分(17)实践之创建schema级复制环境
- c2-3-main-frm_11501-11700渲染日志
- c2-1-begin-v1-frm_11000-11199渲染日志
- iOS之Streams
- char c1,c2;与int c1,c2是否无条件地等价.cpp
- vs2010 没法打开包括文件:“streams.h”: No such file or directory
- oracle Streams实践之创建全库复制(2)
- Discretized Streams, 离散化的流数据处理
- HP DC04 [C2-1006]/[C2-1010] 报错代码_20131205