第40节:Java中的IO知识案例
流是一连流串的字符,是信息的通道,分输出流和输入流。
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
新加的,对线程是非阻塞的作用。
往后余生,唯独有你
简书作者:达叔小生
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: https://www.jianshu.com/u/c785ece603d1
结语
- 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
- 小礼物走一走 or 点赞