流是一连串流动的数据(字节、字符),以先进先出的方式发送的信息的通道中
输入流
数据从源数据源流入程序的过程称为输入流。可以理解为从源数据源读取数据到程序的过程
输出流
数据从程序流出到目的地的过程称为输出流。可以理解为把数据从程序写入目的地的过程
流的分类:
这里我们介绍的是字节流
字节输入流:InputStream
InputStream 是所有字节输入流的抽象父类,提供了
read 读取一个字节
read(byte[] buf) 读取一定量的字节到缓冲区数组 buf中
FileInputStream 文件字节输入流,专门用于从文件中读取字节到程序内存中
public static void main(String[] args) throws IOException { File file=new File("D:\111\a.txt"); //创建管道 FileInputStream in=new FileInputStream(file); //循环读取一个字节 int i; StringBuilder sb=new StringBuilder(); while ((i=in.read())!=-1) { sb.append((char)i); } System.out.println(sb); in.close(); //循环读取多个字节 (先读到缓冲区) byte []buf=new byte[5]; //与每次读取一个字节的区别:可以设置读取的长度 int len; StringBuilder sb2=new StringBuilder(); while ((len=in.read(buf))!=-1) { String str=new String(buf,0,len); sb2.append(str); System.out.println(sb2); } in.close(); }
字节输出流:OutputStream
OutputStream 是所有字节输出流的抽象父类,提供了
write() 写入一个字节
write(byte[] buf) 写入一定量的字节到输出流
FileOutputStream 文件字节输出流,专门用于从内存中写入字节到文件中
public static void main(String[] args) throws IOException { File file=new File("D:\111\a.txt"); //管道 FileOutputStream out=new FileOutputStream(file); //一次写入多个字节(字符数组或者字符串) String str="nihao zhongguo"; byte[]buf=str.getBytes(); out.write(buf); //也可以用不同的编码格式写入 byte[]buf2=str.getBytes("utf8"); out.write(buf2); out.close(); }
注意:(1)字符串在写入时一定存在编码格式问题;
(2)使用utf8编码格式写入文件时,如果不含中文,win系统会造成误判;
(3)使用字节流写入写出时,向管道中写一个字节,该字节立即写入文件。
总结:
InputStream/OutputStream 用于字节的读写。主要用于读取二进制文件(图片、音频、视频),也可以读取文件性文件