1. IO流
概念:
Java IO 流主要是指通过 Java 程序完成输入、输出的功能。
所谓的输入是指将文件以数据流的形式读取到 Java 程序中,
所谓的输出是指通过 Java 程序将数据流写入到文件中
1.1 流的概念和作用
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的的总称或抽象。即数据在两设备之间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
1.2 IO流的分类
根据处理数据类型的不同分为:字符流和字节流
字符流的由来:因为数据编码的不同,而有了对字符进行高效操作的对象。本质其实就是基于字节流读取时,去查了指定的码表。
1.2.1 字节流和字符流的区别:
1) 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
2) 处理对象不同:字节流 处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据
3) 字节流:一次读入或读出是8为二进制
4) 字符流:一次读入或读出是16位二进制
设备上的数据无论是图片或者视屏,文字,它们都是以二进制存储的。二进制的最终都是以一个8为为数据单元进行体现,所以计算机中最小的数据单元就是字节。意味着,字节流可以处理设备上的所又数据,所以字节流一样可以处理字符数据。
只要是处理纯文本数据,就优先考虑使用字符流。除此之外都使用字节流
根据数据流向分:输入流 输出流
输入流只能进行读操作,输出流只能进行写操作,程序中需要根据传输数据的不同特性而使用不同的流。
2. IO流原理及分类
java.io.File类的使用
IO原理及流的分类
文件流
FileOutputstream/FileInputStream/FileReader/FileWriter
缓冲流
BufferedInputStream/BufferedOutputStream
/BufferedReader/BufferedWriter
转换流
InputStreamReader/OutputStreamReader
标准输入/输出流
打印流
PrintStream/PrintWriter
数据流
DataInputStream/DataOutputStream
对象流-涉及序列化,反序列化
ObjectInputStream/ObjectOutputStream
随机存取文件流
RandomAccessFile
//File常用的方法
访问文件名:
getName() getPath() getAbsoluteFile() getAbsolutePath(); getParent();
renameTo(File newName)
文件检测
exists() canWrite() canRead() isFile() isDirectory()
文件操作相关
createNewFile() delete()
* 目录操作相关
mkDir() mkDirs() list() listFiles()
获取常规文件信息
lastModified() length()
3. JAVAh中IO流操作有关的类与接口
类
类 | File |
---|---|
File | (文件类) |
RandomAccessFile | (随机存取文件类) |
OutputStream | ((字节输出流) |
InputStream | (字符输入流) |
Reader | (字节输入流) |
writer | (字符输出流) |
————————————————
版权声明:本文为CSDN博主「西边的虫虫」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wzq18845280610/article/details/103116778
4.字节流和字符流
字节流:InputStream和OutputStream是java中可以按照最小字节单位读取的流,即每次读写一个字节,字节流是直接连接到输入源的流。
字符流:是以字符为单位进行数据处理的IO流。本质其实就是基于字节流读取时,去查找指定的码表。
4.1字节流与字符流之间的区别:
1.读写单位不同:字节流式以字节(8位2进制)为单位,字符流是以字符为单位,根据码表映射字符,一次可能读多个字节。
2.处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
3.一次读入或读出是8位二进制。
4.字符流:一次读入或读出是16位二进制。
结论:只要是纯文本数据优先使用字符流,除此之外都使用字节流。
4.2输入流和输出流的用途
输入流是指程序从数据源中读取数据。只进行读操作;
输出流是指将数据从程序中写到指定的文件中;
5.输入流字节流InputStream与输出字节流InputStream
1.InputStream是一个抽象类,是所有输入字节流的父类。
2.ByteArrayInputStream、StringBufferInputStream、FileInputStream是三中基本的戒指了,他们分别从数组、StringBuffer、和本地文件中读取数据。
3.PipedInputStream是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。
4.ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。
1.OutputStream 是所有的输出字节流的父类,它是一个抽象类。
2.ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。
3.PipedOutputStream 是向与其它线程共用的管道中写入数据。
4.ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。