流是一连流串的字符,是信息的通道,分输出流和输入流。
IO
的分类
第一种分:输入流和输出流。
第二种分:字节流和字符流。 第三种分:节点流和处理流。Java
中流的分类:
流的数据类型,可以分为字节流和字符流。
输入流类都是抽象类InputStream
(字节输入流)或抽象类Reader
类(字符输入流)的子类。
输出流类都是抽象类OutputStream
(字节输出流)或抽象类Writer
类(字符输出流)的子类。
输入流从文件输入为读取,输出流从文件输出为写入数据。
字节输入流InputStrem
和子节输出流OutputStream
InputStream:FileInputStream,ObjectInputStream,ByteArrayInputStream,StringBufferInputStream,BufferedInputStream,DataInputStream
OutputStream:FileOutputStream,ObjectOutputStream,ByteArrayOutputStream,BufferedOutputStream,DataOutputStream
输入流
输入流用于读取数据,用户可以从输入流中读取数据,但不能写入数据。输入流读取数据过程如下:
(1)打开一个流。 如:FileInputStream inputFile=new FileInputStream("数据源");
(2)从信息源读取信息。 如:inputFile.read();
(3)关闭流。 如:inputFile.close();
输出流
输出流用于写入数据。只能写,不能读。写数据到输出流过程如下:
(1)打开一个流。 如:FileOutputStream outFile=new FileOutputStream("数据源");
(2)写入信息到目的地。 如:outFile.write(inputFile.read()):
(3)关闭流。 如:outFile.close();
字符流Reader
和Writer
字节字符转换流:
InputStreamReader
OutputStreamWriter
加入缓冲流可以加快输入和输出的速度。
FileInputStream fis = new FileInputStream("from.txt");InputStreamReader isr = new InputStreamReader(fis);// 可以加快输入和输出的速度BufferedReader br = new BufferedReader(isr);
FileInputStream fis = new FileInputStream("from.txt");InputStreamReader isr = new InputStreamReader(fis);// 可以加快输入和输出的速度BufferedReader br = new BufferedReader(isr);FileOutputStream fos = new FileOutputStream("from.txt");OutputStreamWriter osw = new OutputStreamWriter(fos);// 可以加快输入和输出的速度BufferedWriter bw = new BufferedWriter(osw);
import java.io.*;class Test{ public static void main(String[] args){ // 声明输入流 FileInputStream fis = null; // 声明输出流 FileOutputStream fos = nulll; try{ // 生成输入流对象 fis = new FileInputStream("e:/from.txt"); // 生成输出流的对象 fos = new FileOutputStream("e:/to.txt"); // 生成字节数组 byte[] buffer = new byte[1024]; while(true){ // 调用输入流对象的read方法 int temp = fis.read(buffer,0,buffer.length); if(temp == -1){ break; } fos.write(buffer,0,temp); } }catch(Exception e){ System.out.println(e); }finally{ try{ fis.close(); fos.close(); }catch(Exception e){ System.out.println(e); } }}}
字节输入流和字节输出流
Reader FileReaderWriter FileWriter
int read(char[] c, int off, int len)void write(char[] c, int off, int len)
import java.io.*;public class Demo{ public static void main(String args[]){ FileReader fr = null; // 字符输入流 FileWriter fw = null; try{ fr = new FileReader("e:/from.txt"); // 读取的文件路径 fw = new FileWriter("e:/to.txt"); char[] buffer = new char[100]; int temp = fr.read(buffer,0,buffer.length); fw.write(buffer,0,temp); // for(int i = 0; i
装饰者模式
BufferedReader
处理流 字符流 输入流,字符输入处理流。
方法readLine()
import java.io.*;class Test{ public static void main(String args[]){ FileReader fileReader = null; BufferedReader bufferedReader = null; tryl{ fileReader = new FileReader("e:/from.txt"); bufferedReader = new BufferedReader(fileReader); // readLine() 读取一行数据 String line = bufferedReader.readLine(); System.out.println(line); // String line = null; while(true){ line = bufferedReader.readLine(); if(line == null){ break; } System.out.println(line); } }catch(Exception e){ System.out.println(e); }finally{ try{ bufferedReader.close(); fileReader.close(); }catch(Exception e){ System.out.println(e); } }}
工厂模式
interface Student{ public void doWork();}
class Demo1 implements Student{ public void doWork(){ System.out.println("Demo1"); }}
class Demo2 implements Student{ public void doWork(){ System.out.println("Demo2"); }}
class Dashu implements Student{ private Stuent student; public Dashu(Student student){ this.student = student; } public void doWork(){ System.out.println("dashu"); student.doWork(); }}
class School{ public static void main(String[] args){ // Demo1 demo1 = new Demo1(); Dashu dashu = new Dashu(demo1); dashu.doWork(); }}
IO
为输入输出的意思,从外面读取数据用InputStream
,向外边写入数据用OutputStream
,Stream
为流,在计算机中一切都是以二进制的字节构成的世界,InputStream
和OutputStream
来读取二进制,我们看起来会很麻烦,所以有了Reader/Writer
的接口,用来处理这些字符流。
FileReader fileReader = new FileReader("e:/from.txt");BufferedReader bufferedReader = new BufferedReader(fileReader);String line = bufferedReader.readLine();
try{FileReader fileReader = new FileReader("e:/from.txt");BufferedReader bufferedReader = new BufferedReader(fileReader);String line = null;while(true){ line = bufferedReader.readLine(); if(line == null){ break; } System.out.println(line);}}catch(Exception e){ System.out.println(e);}finally{ try{ bufferedReader.close(); fileReader.close();}catch(Exception e){ System.out.println(e);}
增强API - NIO non-blocking IO
Channel Buffer Selector
nio
新加的,对线程是非阻塞的作用。
往后余生,唯独有你
简书作者:达叔小生 90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通 简书博客:
结语
- 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
- 小礼物走一走 or 点赞