Java进阶学习第十六节——输入输出流

流的概念和作用

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

IO流的分类

根据处理数据类型的不同分为:字符流和字节流
根据数据流向不同分为:输入流和输出流

字符流和字节流

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:

读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

输入流和输出流

对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。

Java IO流对象

一、输入字节流InputStreamIO :
1、InputStream 是所有的输入字节流的父类,它是一个抽象类。

2、ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。PipedInputStream 是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。

3、ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。

二、输出字节流OutputStream

OutputStream 是所有的输出字节流的父类,它是一个抽象类。
ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它
们分别向Byte 数组、和本地文件中写入数据。PipedOutputStream 
是向与其它线程共用的管道中写入数据,
ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。

流:指一连串流动的字符,以先进先出的方式发送信息的通道
文件输入——读取数据,文件输出——写数据(写到目的地)

File:什么是文件:文件可认为是相关记录或放在一起的数据的集合
在Java中,使用java.io.File类对文件进行操作

创建File对象:
第一种方式:
File file = new File("文件路径");
第二种方式:
File file = new File("文件路径","子路径");
第三种方式:
File file = new File("C:\\imooc");
File file1 = new File(file,"io\\score.txt");

方法:File.isDirectory():判断是否为目录
	         File.isFile():判断是否为文件
创建文件和目录:
File.exists():判断是否有这个文件或目录
File.mkdir():创建单个目录
File.mkdirs():创建多级目录
        File.createNewFile():创建文件

相对路径与绝对路径:
绝对路径:从盘符开始的路径
相对路径:是从当前路径开始的路径(..\:返回上一级目录)在eclipse里当前路径是工程路径
File.Absolute():查看是否为绝对路径
File.getAbsolute():获取绝对路径
File.getPath():获取相对路径
File.getName():获取文件名

字节流:字节输入流InputStream(),字节输出流OutputStream()

FileInputStream:从文件系统中的某个文件中获得输入字节
		    用于读取诸如图像数据之类的原始字节流

在这里插入图片描述

read()方法:

在这里插入图片描述

read(byte[])方法:

在这里插入图片描述

FileOutputStream:将数据写入到文件中,当构造方法中的bool类型是true时,
在文件末尾追加数据

在这里插入图片描述

write()方法:

在这里插入图片描述

复制与粘贴图片:

在这里插入图片描述

缓冲流:
缓冲输入流:BufferedInputStream
缓冲输出流:BufferedOutputStream

在这里插入图片描述

字符流:
字符输入流:Reader
字符输出流:Writer

字节字符转换流:
InputStreamReader
OutputStreamWrite

在这里插入图片描述

对象序列化:序列化接口:Serializable,必须实现这个接口才能被序列化输出输入
序列化:把Java对象转换为字节序列的过程(写)
反序列化:把字节序列恢复为Java对象的过程(读)
对象输入流ObjectInputStream
对象输出流ObjectOutputStream

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38846837/article/details/84945805