一、字节输入流InputStream类
1、InputStream类是所有面向字节的输入流的父类,为java.io包中的抽象类。类的定义如下:public abstream class InputStream extends Object
2、InputStream类中声明了用于字节输入流的多个方法,包括读取数据、标记位置、获取数据量、关闭数据流等。常用方法如下:
Read(): 从流中读入数据。
Skip(): 跳过流中读入数据。
Available(): 返回流中可用字节数。
Mark(): 在流中标记一个位置。
Reset(): 返回标记过的位置。
markSupport(): 是否支持标记和复位操作。
Close(): 关闭流。
二、字节输出流OutputStream类
1、Outputstream类为所有面向字节的输出流的父类,为java.io包中的抽象类。类的定义如下:public abstract class OutputStream extends Object
2、OutputStream类中声明了用于字节输出流的多个方法,包括写出数据、刷新缓冲区、关闭数据流等。常用方法如下:
Writer(int b): 将一个整数输出到流中。
Werter(byte b[]); 将数组中的数据输出到流中。
Werter(byte b[],int off,int len); 将数组b中从off指定的位置开始len长度的数据输出到流中。
Flush(): 将缓冲区中得数据强制送出。
Close(): 关闭流。
三、转换流:在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在一组字节流—字符流的转换流。
1、OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流的输出对象。(字符到字节的桥梁)
2、InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。(字节到字符的桥梁)
3、操作文件的字符流FileReader和FileWriter是转换流的子类,因此从他们的继承关系就可以清楚的发现,不管是使用字节流还是字符流实际上最终都是以字节的形式操作输入和输出的。
四、注意:在使用FileReader操作文本数据时,该对象使用的是默认的编码表。如果要使用指定编码表时,必须使用转换流。
例子
Package wsp.io;
import java.io.*;
public class DemoConvertStream {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//把字符数据写出到磁盘文件
//输出流---转换流OutputStreamWriter---字节流对象做参数FileOutputStream
FileOutputStream fos=new FileOutputStream("res/demo.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
osw.write("hello");
osw.write("中国");
osw.flush();
osw.close();
FileInputStream fis=new FileInputStream("res/demo.txt");
InputStreamReader isw=new InputStreamReader(fis,"UTF-8");
char cbuf[]=new char[10];
int len=isw.read(cbuf);
System.out.println(new String(cbuf,0,len));
}
}
五、编写程序copy一个图片
《这个转换流的例子很有代表性》
package wsp.io;
import java.io.*;
public class CopyImageDemo {
public static void main(String[] args){
//复制---从源文件中读取数据,写入到目标文件
//输入流----FileInputSream BufferedInputStream 输出流--FileOutputStream BufferedOutputStream
FileInputStream fis=null;
FileOutputStream fos=null;
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
try {
fis=new FileInputStream("示例图片.gif");
bis=new BufferedInputStream(fis);
fos=new FileOutputStream("复制后的图片.gif");
bos=new BufferedOutputStream(fos);
int n=0;
while((n=bis.read())!=-1){
bos.write(n);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(bis!=null){
try {
bis.close(); //关闭bis
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(bos!=null){
try {
bos.close(); //关闭bos
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
六、 标准输入/输出流
1、System.in作为字节输入流类InputStream的对象,实现标准的输入,使用其read()方法从键盘接收数据。
public int read() throws IOException
public int read(byte[] i) throws IOException
2、标准的输出System.out
System.out是打印流类PrintStream的对象,用来实现标准输出。print()和println()方法,支持任意的基本类型作为参数。
public void print(参数)
public void println(参数)