前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第40节:Java中的IO知识案例

第40节:Java中的IO知识案例

作者头像
达达前端
发布2019-07-03 11:55:30
3420
发布2019-07-03 11:55:30
举报
文章被收录于专栏:达达前端达达前端

标题图

流是一连流串的字符,是信息的通道,分输出流和输入流。

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();

字符流ReaderWriter

字节字符转换流: InputStreamReader OutputStreamWriter

加入缓冲流可以加快输入和输出的速度。

代码语言:javascript
复制
FileInputStream fis = new FileInputStream("from.txt");
InputStreamReader isr = new InputStreamReader(fis);
// 可以加快输入和输出的速度
BufferedReader br = new BufferedReader(isr);
代码语言:javascript
复制
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);
代码语言:javascript
复制
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);
  }
 }
}
}

字节输入流和字节输出流

代码语言:javascript
复制
Reader FileReader
Writer FileWriter
代码语言:javascript
复制
int read(char[] c, int off, int len)
void write(char[] c, int off, int len)
代码语言:javascript
复制
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()

代码语言:javascript
复制
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);
  }
 }
} 

工厂模式

代码语言:javascript
复制
interface Student{
 public void doWork();
}
代码语言:javascript
复制
class Demo1 implements Student{
 public void doWork(){
  System.out.println("Demo1");
 }
}
代码语言:javascript
复制
class Demo2 implements Student{
 public void doWork(){
  System.out.println("Demo2");
 }
}
代码语言:javascript
复制
class Dashu implements Student{
 private Stuent student;
 public Dashu(Student student){
 this.student = student;
 }
 public void doWork(){
  System.out.println("dashu");
  student.doWork();
 }
}
代码语言:javascript
复制
class School{
 public static void main(String[] args){
   // 
   Demo1 demo1 = new Demo1();
   Dashu dashu = new Dashu(demo1);
   dashu.doWork();
 }
}

IO为输入输出的意思,从外面读取数据用InputStream,向外边写入数据用OutputStreamStream为流,在计算机中一切都是以二进制的字节构成的世界,InputStreamOutputStream来读取二进制,我们看起来会很麻烦,所以有了Reader/Writer的接口,用来处理这些字符流。

代码语言:javascript
复制
FileReader fileReader = new FileReader("e:/from.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line = bufferedReader.readLine();
代码语言:javascript
复制
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

代码语言:javascript
复制
Channel Buffer Selector 

nio新加的,对线程是非阻塞的作用。

往后余生,唯独有你 简书作者:达叔小生 90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通 简书博客: https://www.jianshu.com/u/c785ece603d1

结语

  • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.09.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 装饰者模式
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档