利用物联网技术击败冠状病毒?
utputStream 中大多数的类和 InputStream 是对应的,只不过数据的流向不同而已。从上面的图可以看出:
字符流对象字符流对象也会有对应关系,大多数的类可以认为是操作的数据从字节数组变为字符,类的功能和字节流对象是相似的。
字符输入流和字节输入流的组成非常相似,字符输入流是对字节输入流的一层转换,所有文件的存储都是字节的存储,在磁盘上保留的不是文件的字符,而是先把字符编码成字节,再保存到文件中。在读取文件时,读入的也是一个一个字节组成的字节序列,而 Java 虚拟机通过将字节序列,按照2个字节为单位转换为 Unicode 字符,实现字节到字符的映射。 需要注意的是如果回推字节时,如果缓冲区已满,会抛出 IOException 异常。 它的应用场景:对数据进行分类规整。 假如一个文件中存储了数字和字母两种类型的数据,我们需要将它们交给两种线程各自去收集自己负责的数据,如果采用传统的做法,把所有的数据全部读入内存中,再将数据进行分离,面对大文件的情况下,例如1G、2G,传统的输入流在读入数组后,由于没有缓冲区,只能对数据进行抛弃,这样每个线程都要读一遍文件。 使用 PushBackInputStream 可以让一个专门的线程读取文件,唤醒不同的线程读取字符:
到这里,你是否会想到 AQS 的 Condition 等待队列,多个线程可以在不同的条件上等待被唤醒。 (6)BufferedInputStream 缓冲流,它是一种处理流,对节点流进行封装并增强,其内部拥有一个 buffer 缓冲区,用于缓存所有读入的字节,当缓冲区满时,才会将所有字节发送给客户端读取,而不是每次都只发送一部分数据,提高了效率。 (7)DataInputStream 数据输入流,它同样是一种处理流,对节点流进行封装后,能够在内部对读入的字节转换为对应的 Java 基本数据类型。 (8)SequenceInputStream 将两个或多个输入流看作是一个输入流依次读取,该类的存在与否并不影响整个 IO 生态,在程序中也能够做到这种效果 (9)StringBufferInputStream 将字符串中每个字符的低 8 位转换为字节读入到字节数组中,目前已过期 InputStream 总结:
OutputStreamOutputStream 是字节输出流的抽象基类,提供了通用的写方法,让继承的子类重写和复用。
方法功能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()关闭此输出流并释放与此流关联的所有系统资源 (编辑:衡水站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |