标题图
流是一连流串的字符,是信息的通道,分输出流和输入流。
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 FileReader Writer 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<buffer.length; i++){ System.out.println(buffer[i]; } // }catch(Exception e){ System.out.println(e); }finally{ try{ fr.close(); fw.close(); }catch(Exception e){ System.out.println(e); } } } }
装饰者模式
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
新加的,对线程是非阻塞的作用。
作者:达叔小生
链接:https://www.jianshu.com/p/cfe2b8a0df3b
共同学习,写下你的评论
评论加载中...
作者其他优质文章