IO概念
- I/O: Input/Output,输入、输出
- stream:流,数据流,数据传输、通信的通道
- Java应用程序中,“流”是基本的传输数据的方式。JDK提供了各种“”流”来操作数据。
InputStream抽象类
字节输入流:继承自InputStream的流都是输入流,用于向程序中输入数据,且数据的单位为字节
InputStream
1. FileInputStream
2. StringBufferInputStream
3. AudioInputStream
4. ByteArrayInputStream
5. PipedInputStream
6. FilterInputStream ——->BufferedInputStream
7. ObjectInputStream
8. SequenceInputStream
InputStream常用法
public abstract int read() throws IOException
从输入流中读取数据的下一个字节,返回读到的字节值,若达到流的末尾,返回-1
public int read(byte[] b) throws IOException
从输入流中读取b.length个字节的数据,并存取到缓冲区数组b中,返回实际读到的字节总数
public int read (byte[] b , int off , int len )throws IOException
读取len个字节的数据,并从数组b的off位置开始写入到该数组中
public void close () throws IOException
关闭此输入流并释放与此流关联的所有系统资源
FileInputStream类
该类是字节输入流InputStream的常用实现类,构造方法如下:
public FileInputStream(File file)
根据一个file实例来创建FileInputStream对象
public FileInputStream(String name)
根据文件名称来创建FileInputStream对象
OutputStream抽象类
字节输出流:继承自OutputStream的流都是输出流,用于程序向外输出数据,且数据的单位为字节
OutputStream
1.FileOutputStream
2.ByteArrayOutputStream
3.PipedOutputStream
4. FilterOutputStream ———–>BufferedOutputStream
5. ObjectOutputStream
OutputStream常用方法
public abstract void write(int b) throws IOException
将指定的字节写入此输出流
public void write(byte[] b) throws IOException
将 b.length 个字节从指定的 byte 数组写入此输出流
public void write(byte[] b, int off, int len) throws IOException
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流
public void flush() throws IOException
刷新此输出流并强制写出所有缓冲的输出字节
pulbic void close() throws IOException
关闭此输出流并释放与此流有关的所有系统资源(含刷新操作)
缓冲流
缓冲流是处理流(过滤流,高级流)的一种,建立在相应的节点流之上,对读写数据提供了缓冲功能,提高了效率,此外,还增加了一些方便的方法。
**JDK提供2种缓冲流:字节缓冲流,字符缓冲流**
1.BufferedInputStream:对InputStream流进行包装
2.BufferedOutputStream:对OutputStream流进行包装
3.BufferedReader:对Reader流进行包装
4.增加readLine()方法,用于一次读取一行字符串
5.BufferedWriter:对Writer流进行包装
6.增加newLine()方法,用于写出一个行分隔符
注意:
缓冲输出流,要写出的数据会先缓存在内存缓冲区中,关闭此流前可以用flush()方法将缓存区的数据立刻写出。关闭处理流时,会自动关闭处理流所包装的底层流。
字节缓冲流
BufferedInputStream:对InputStream流进行包装
BufferedOutputStream:对OutputStream流进行包装
对字节缓冲流而言,除了使用缓冲区提高效率之外,并没有额外增加方法,和FileInputStream,FileOutputStream用法类似
public static void method4(){
try {
FileInputStream inputStream = new FileInputStream("E:/学习.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
FileOutputStream outputStream = new FileOutputStream("D:/zz.txt");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
byte[] bytes = new byte[15];
inputStream.read(bytes);
int length = 0;
while((length=bufferedInputStream.read(bytes))!=-1){
bufferedOutputStream.write(bytes,0,length);
}
bufferedOutputStream.flush();
bufferedOutputStream.close();
outputStream.close();
bufferedInputStream.close();
inputStream.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void method2(){
try {
FileReader fileReader = new FileReader("E:/学习.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
String messege = "";
while((messege=bufferedReader.readLine())!=null){
System.out.println(messege);
}
fileReader.close();
bufferedReader.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void method3(){
String msg ="好好学习";
try {
FileWriter fileWriter = new FileWriter("E:/学习.txt");
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(msg);
bufferedWriter.newLine();
bufferedWriter.write("天天向上");
bufferedWriter.flush();
fileWriter.close();
bufferedWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}