Java(七)IO流

IO流

用来处理设备之间的数据传输。
Java对数据的操作是通过流的方式。
用于操作流的类都在IO包中。

  • 流按操作类型分为两种:
    * 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的。
    * 字符流 : 字符流只能操作纯字符数据,比较方便。
  • IO流常用父类
    • 字节流的抽象父类:
      • InputStream
      • OutputStream
    • 字符流的抽象父类:
      • Reader
      • Writer
  • IO程序书写
    • 使用前,导入IO包中的类
    • 使用时,进行IO异常处理
    • 使用后,释放资源

FileInputStream和FileOutputStream
都是节点流,第一个类的源数据端和第二个类的目的端都是磁盘文件,构造方法允许通过文件的路径来构造相应的流。
注意:第一个所对应的文件必须存在并且是可读的,第二个若输出文件已存在,则必须是可覆盖的。
PipedInputStream和PipedOutputStream
它们实例要共同使用,共同完成管道的读取写入操作。主要用于线程操作。
BuffereInputStream和BuffereOutputStream
Buffere缓冲流主要作用是把数据从原始流成块读入或把数据积累到一个大数据块后在成批写出,通过减少系统资源的读写次数来加快程序的执行,提高数据访问的效率。并且BuffereOutputStream类仅在缓冲区满或调用flush()方法时才将数据写到目的地。
DataInputStream和DataOutputStream
过滤器流,允许程序按与机器无关的风格读写Java数据。适用于网络上的数据传输。
InputStreamReader和OutputStreamWriter
构造着两个类对应的流时,它们会自动进行转换,将平台缺省的编码集编码的字节转换为Unicode字符。对英语环境,其缺省的编码集一般为ISO8859-1.

NIO有什么作用?

在Java程序中会用到大量的I/O操作,由于传统的I/O操作是阻塞式,无法有效地利用CUPU,大大影响了程序性能,为此,会使用NIO来改写以前的I/O部分,NIO是非阻塞式,可提高程序的性能,提升CPU的利用率。

NIO与IO的区别?

  1. 面向流与面向缓冲区
    NIO是面向缓冲区,数据读取到一个缓冲区,需要时可在缓冲区中前后移动。增加处理过程的灵活性。但是,需要检查该缓冲区中是否包含需要处理的数据。
    I/O流是面向流,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。若需要先将它缓存到一个缓冲区。
  2. 阻塞与非阻塞I/O
    NIO是非阻塞模式,当一个线程从某通道发送请求读取数据时,它仅能得到目前可用的数据,若没有数据可用,就什么都不做。而不是保持线程阻塞,所以直至数据可以读取之前,该线程可以做其他事情。
    I/O的各种流时阻塞的,当一个线程调用read()或write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情。
  3. 选择器(selector)
    NIO的选择器允许一个单独的线程来监视多个输入通道,可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道。
    IO没有选择器。

磁盘I/O的工作机制?(即I/O流读取文件并解析的过程)

当传入一个文件路径时,会根据这个路劲创建一个File对象来标识这个文件,然后会根据这个File对象创建真正读取文件的操作对象,这时将会真正创建一个关联真实存在的磁盘文件的文件描述符FileDescriptor,通过这个对象可以直接控制这个磁盘文件。由于需要读取的时字符格式,所以需要SteamDecoder类将byte解码为char格式。

序列化
将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。
Intent如果要传递类对象,可以通过两种方式实现:

  • Serializable(Java自带):
    Serializable是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。
  • Parcelable(android 专用):
    不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,
    而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值