学习内容:
- IO流简介
1.1 什么是IO
1.2 数据源
1.3 流的概念
1.4 Java中四大IO抽象类
1.5 Java中流的概念细分
1.6 Java中IO流类的体系 - IO流入门案例
2.1 第一个简单的IO流程序
2.2改造入门案例
学习笔记:
1.IO流简介
1.1 什么是IO
Java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中。当不同的介质之间有数据交互的时候,JAVA就使用流来实现。
1.2 数据源
数据源Date Source,提供数据的原始媒介。常见的数据源有:数据库,文件,其他程序,内存,网络设备,IO设备等等。
数据源分为:源设备,目标设备
- 源设备:为程序提供数据,一般对应输入流。
- 目标设备:程序数据的目的地,一般对应输出流。
1.3 流的概念
流是一个抽象的动态的概念,是一串连续动态的数据集合。它是对输入输出设备的一种抽象理解,在java中,对数据的输入输出操作都是以“流”的方式进行的。“流”具有方向性,输入流、输出流是相对的。当程序需要从数据源中读入数据的时候就会开启一个输入流,相反,写出数据到某个数据源目的地的时候也会开启一个输出流。数据源可以是文件、内存或者网络等。
注意:输入\输出流的划分是相对于程序而言的,并不是相对于数据源。
1.4Java中四大IO抽象
IO四大抽象类: InputStream、OutputStream、Reader、Writer
- InputStream:字节输入的父类,数据单位为字节。
- 常用方法:
int read();从输入流中读取下一个字节
viod close(); 关闭流
- 常用方法:
- OutputStream:字节输出流的父类,数据单位为字节。
- 常用方法:
void write(int b); 将一个integer数组长度写入此流
void flush(); 刷新此流
void close(); 关闭该流并释放与之相关的所有资源
- 常用方法:
- Reader:字符输入流的父类,数据单位为字符。
- 常用方法:
int read(); 读取单个字符。
int read(char[] cbuf, int off , int len ); 将字符读入数组的某一部分。
void close(); 关闭该流并释放与之相关的所有资源
- 常用方法:
- Writer:字符输出流的父类,数据单位为字符。
- 常用方法:
void writer(); 创建一个字符流
void flush(); 刷新此流
void close(); 关闭流并释放与之相关的所有资源
- 常用方法:
注意:能用字节流不一定能用字符流,能使用字符流不一定能使用字节流。
1.5Java中流的概念细分
-
按照处理的数据单元分类:
- 字节流:以字节为单位获取数据,命名上以Stream结尾的流一般都是字节流。
- 字符流:以字符为单位获取数据,命名上以Reader/Writer结尾的流一般都是字节流
-
按处理对象不同分类:
- 节点流:可以直接从数据源或目的地读写程序
- 处理流:不直接连到数据源或目的地,是“处理流的流”,通过对其他流的处理提高程序的性能
1.6Java中IO流类的体系
2 IO流入门案例
2.1第一个简单的IO流程序
import java.io.FileInputStream;
public class day1 {
public static void main(String[] args) {
// 创建字节输入流对象
FileInputStream fis = null;
try {
fis = new FileInputStream("d:/a.txt");
int s1 = fis.read();//打印输入字符w对应的ascll码的数值
int s2 = fis.read();//打印输入字符y对应的ascll码的数值
int s3 = fis.read();//打印输入字符m对应的ascll码的数值
int s4 = fis.read();//因为文件内容已经读取完毕,则返回-1
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
}catch(Exception e) {
e.printStackTrace();
}finally {
if (fis != null) {
try {
fis.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
输出结果
119
121
109
-1
2.1改造入门案例
import java.io.FileInputStream;
public class day1 {
public static void main(String[] args) {
// 创建字节输入流对象
FileInputStream fis = null;
try {
fis = new FileInputStream("d:/a.txt");
StringBuilder sb = new StringBuilder();
int temp = 0;
while((temp = fis.read()) != -1) {
System.out.println(temp);
sb.append((char)temp);
}
System.out.println(sb.toString());
}catch(Exception e) {
e.printStackTrace();
}finally {
if (fis != null) {
try {
fis.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
输出结果:
119
121
109
wym