首先我们需要了解输入输出的概念,然后输入输出的这一个过程可以理解为流,即读取一点数据处理一点数据。字节流和字符流则可以理解为流读取输出的方式。
输入输出
输入:把电脑硬盘上的数据读取到程序中,称为输入,即input,进行数据的read。
按数据的传输方向可以称为输入流
输出: 从程序往外部设备写数据 ,进行数据的write操作。
按数据的传输方向可以称为输出流
字节流
InputStream和OutputStream的子类都是字节流 可以读写二进制文 件,主要处理音频、图片、歌曲、字节流,处理单元 为1个字节。
字节流常用类
- 字节输入流 FileInputStream
1.【int】read()方法:读取一个字节并以ascll值的整数形式返回,如果读取到输入流的末尾则返回-1;
2.【int】read(byte []bytes): 读取一系列字节并存储到一个数组buffer, 返回实际读取的字节数,如果读取前已到输入流的末尾返回-1;
3.【void】close()方法:关闭流释放内存资源;
- 字节输出流 FileOutputStream
1.【void】 write(int b):向输出流中写入一个字节数据,该字节数据为参数b的低8位
2.【void】 write(byte[] b, int off, int len): 将一个字节类型的数组中的从指定位置(off)开始的 len个字节写入到输出流
3.【void】 close(): 关闭流释放内存资源
方法的使用
public static void main(String[] args) throws IOException {
//创建一个输入流的对象
FileInputStream in=new FileInputStream("D:/a.txt");
FileOutputStream out=new FileOutputStream("D:/a1.txt");
// 每次读取一字节比较慢
int t=0;
while ((t=in.read())!=-1){//t储存读取字符的ascll值
System.out.println(t);
out.write(t);
}
//每次读取更多字节
byte []bytes=new byte[10];
int size=0;
while ((size=in.read(bytes))!=-1)//用size接受每一次读取bytes的大小
{
System.out.println(size);
out.write(bytes,0,size);//输出bytes的内容,从0索引开始,创造大小为size的新文件。
}
//关闭流对文件的占用
in.close();
out.close();
}
字符流
Reader和Writer的子类都是字符流 主要处理字符或字符串,字符流处 理单元为1个字符。 字节流将读取到的字节数据,去指定的编码表中获取 对应文字字符。
- 字符输入流 FileReader
1.【int】 read() :读取一个字符并以整数的形式返回, 如果返回-1已到输入流的末尾。
2.【int】 read( char[] cbuf): 读取一系列字符并存储到一个数组buffer, 返回实际读取的字符数,如果读取前 已到输入流的末尾返回-1
3. 【void】 close():关闭
- 字符输出流 FileWrite
1.【void】 write(int c):向输出流中写入一个字符数据,该字节数据为参数b的16位
2.【void】 write( char[] cbuf):一个字符类型的数组中的数据写入输出流
3.【void】 write( char[] cbuf, int off set, int length):将一个字符类型的数组中的从指定位置(off set)开始的 length个字符写入到 输出流
4.【void】 close():关闭
方法的使用
//字符流
FileReader reader=new FileReader("D:/a.txt");
FileWriter writer=new FileWriter("D:/a2.txt");
char[] chars=new char[10];
int size=0;
while((size= reader.read(chars))!=-1)
{
writer.write(chars,0,size);
}
reader.close();
writer.close();