加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡水站长网 (https://www.0318zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

利用物联网技术击败冠状病毒?

发布时间:2021-02-13 11:27:32 所属栏目:动态 来源:互联网
导读:utputStream 中大多数的类和 InputStream 是对应的,只不过数据的流向不同而已。从上面的图可以看出: OutputStream 是所有输出字节流的抽象基类 ByteArrayOutputStream 和 FileOutputStream 是两种基本的节点流,它们分别向字节数组和本地文件写出数据 Data

utputStream 中大多数的类和 InputStream 是对应的,只不过数据的流向不同而已。从上面的图可以看出:

  • OutputStream 是所有输出字节流的抽象基类
  • ByteArrayOutputStream 和 FileOutputStream 是两种基本的节点流,它们分别向字节数组和本地文件写出数据
  • DataOutputStream、BufferedOutputStream 是处理流,前者可以将字节数据转换成基本数据类型写出到文件中;后者是缓冲字节数组,只有在缓冲区满时,才会将所有的字节写出到目的地,减少了 IO 次数。
  • PipedOutputStream 用于多线程通信,可以和其它线程共用一个管道,向管道中写入数据
  • ObjectOutputStream 用于对象的序列化,将对象转换成字节数组后,将所有的字节都写入到指定位置中
  • PrintStream 在 OutputStream 基础之上提供了增强的功能,即可以方便地输出各种类型的数据(而不仅限于byte型)的格式化表示形式,且 PrintStream 的方法从不抛出 IOEception,其原理是写出时将各个数据类型的数据统一转换为 String 类型,我会在讲解完

字符流对象

字符流对象也会有对应关系,大多数的类可以认为是操作的数据从字节数组变为字符,类的功能和字节流对象是相似的。

字符输入流和字节输入流的组成非常相似,字符输入流是对字节输入流的一层转换,所有文件的存储都是字节的存储,在磁盘上保留的不是文件的字符,而是先把字符编码成字节,再保存到文件中。在读取文件时,读入的也是一个一个字节组成的字节序列,而 Java 虚拟机通过将字节序列,按照2个字节为单位转换为 Unicode 字符,实现字节到字符的映射。

 

需要注意的是如果回推字节时,如果缓冲区已满,会抛出 IOException 异常。

它的应用场景:对数据进行分类规整。

假如一个文件中存储了数字和字母两种类型的数据,我们需要将它们交给两种线程各自去收集自己负责的数据,如果采用传统的做法,把所有的数据全部读入内存中,再将数据进行分离,面对大文件的情况下,例如1G、2G,传统的输入流在读入数组后,由于没有缓冲区,只能对数据进行抛弃,这样每个线程都要读一遍文件。

使用 PushBackInputStream 可以让一个专门的线程读取文件,唤醒不同的线程读取字符:

  • 第一次读取缓冲区的数据,判断该数据由哪些线程读取
  • 回退数据,唤醒对应的线程读取数据
  • 重复前两步
  • 关闭输入流

到这里,你是否会想到 AQS 的 Condition 等待队列,多个线程可以在不同的条件上等待被唤醒。

(6)BufferedInputStream

缓冲流,它是一种处理流,对节点流进行封装并增强,其内部拥有一个 buffer 缓冲区,用于缓存所有读入的字节,当缓冲区满时,才会将所有字节发送给客户端读取,而不是每次都只发送一部分数据,提高了效率。

(7)DataInputStream

数据输入流,它同样是一种处理流,对节点流进行封装后,能够在内部对读入的字节转换为对应的 Java 基本数据类型。

(8)SequenceInputStream

将两个或多个输入流看作是一个输入流依次读取,该类的存在与否并不影响整个 IO 生态,在程序中也能够做到这种效果

(9)StringBufferInputStream

将字符串中每个字符的低 8 位转换为字节读入到字节数组中,目前已过期

InputStream 总结:

  • InputStream 是所有输入字节流的抽象基类
  • ByteArrayInputStream 和 FileInputStream 是两种基本的节点流,他们分别从字节数组 和 本地文件中读取数据
  • DataInputStream、BufferedInputStream 和 PushBackInputStream 都是处理流,对基本的节点流进行封装并增强
  • PipiedInputStream 用于多线程通信,可以与其它线程公用一个管道,读取管道中的数据。
  • ObjectInputStream 用于对象的反序列化,将对象的字节数据读入内存中,通过该流对象可以将字节数据转换成对应的对象

OutputStream

OutputStream 是字节输出流的抽象基类,提供了通用的写方法,让继承的子类重写和复用。

方法功能public abstract void write(int b)将指定的字节写出到输出流,写入的字节是参数 b 的低 8 位public void write(byte b[])将指定字节数组中的所有字节写入到输出流当中public void write(byte b[], int off, int len)指定写入的起始位置 offer,字节数为 len 的字节数组写入到输出流当中public void flush()刷新此输出流,并强制写出所有缓冲的输出字节到指定位置,每次写完都要调用public void close()关闭此输出流并释放与此流关联的所有系统资源


 

(编辑:衡水站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读