在Java程序中,对于数据的输入/输出操作以“流” (stream) 方式进行;J2SDK提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据。
数据源data source. 提供原始数据的原始媒介。常见的:数据库、文件、其他程序、内存、网络连接、IO设备。
数据源就像水箱,流就像水管中流着的水流,程序就是我们最终的用户。 流是一个抽象、动态的概念,是一连串连续动态的数据集合。
• 流的方向:
输入流:数据源到程序(InputStream、Reader读进来)
输出流:程序到目的地(OutPutStream、Writer写出去)
• 处理数据单元:
字节流:按照字节读取数据(InputStream、OutputStream)
字符流:按照字符读取数据(Reader、Writer)
• 功能不同:
节点流:可以直接从数据源或目的地读写数据。
处理流:不直接连接到数据源或目的地,是处理流的流。通过对其他流的处理提高程序的性能。
• 节点流和处理流的关系:
节点流处于io操作的第一线,所有操作必须通过他们进行;处理流可以对其他流 进行处理(提高效率或操作灵活性)。
• ByteArrayInutStream和ByteArrayOutputStream
• 数据源或目的地为:字节数组
• BufferedInputStream和BufferedOutputStream是处理流,通过内部缓存数组来提高操作流的效率。
• DataInputStream和DataOutputStream提供了可以存取所有Java基础类型数据(如:int,double 等)的方法。
demo
<span style="font-size:18px;"><span style="font-size:18px;">package com.bjsxt.wsl; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; public class HelloIn { public static void main(String[] args) throws IOException { //获取文件路径 InputStream inputStream = new FileInputStream("D:\\hello.txt"); //一般所使用的方式 StringBuilder builder = new StringBuilder(); byte[] bs = new byte[1024]; int num = 0; //开始读取数据 while ((num = inputStream.read(bs)) != -1) { builder.append(new String(bs)); } System.out.println(builder); } </span></span>
• Reader:
用于读取字符流的抽象类,数据单位为字符。
• Writer:
写入字符流的抽象类。
• BufferReader和BufferWriter
读取文本一般使用这一对!
对象的序列化和反序列化:
ObjectInputStream和ObjectOutputStream,数据源或目的地是:对象!
打印流:
PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息。
System.out 就是打印流
InputStreamReader和OutputStreamWrite为处理流:用于将字节流转化成字符流。
文件和目录路径名的抽象表示形式。一个File对象可以代表一个文件或目录,但是不是完全对应的。建立File对象不会对文件系统产生影响。
IO流技术的使用,使得我们的工作更为顺畅,无论是从物理存储的角度来看待,还是从逻辑思维中来理解,都变得很容易接受。
这里只是简单地介绍了IO流技术的一部分,很多细节需要到项目中去实践,才能够不断地有新的认识。
由于要经常考虑到异常问题的出现,对于问题的考虑也会比较全面,对于增强我们的业务能力有很大提升呢!