java中IO流简述

javaIO流介绍

一,javaIO流的作用

用于处理设备上的数据,如读取数据和写入数据

二,流的分类方式

1.1、按流向分类:

       输入流: 读取数据的流,只能进行读操作。
       输出流: 写入数据的流,只能进行写操作。

1.2、按数据传输单位分类:

字节流:以字节(8位二进制)为单位进行处理。以处理所有类型数据,主要用于读写诸如图像或声音的二进制数据。

字符流:以字符(16位二进制)为单位进行处理。只能用来处理文字等字符。

结论:只要是处理纯文本数据,就要优先考虑使用字符流。除此之外都用字节流。

1.3、按功能分类:

节点流:从特定的地方读写的流类,如磁盘或者一块内存区域。

过滤流:使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或者输出流连接创建的。

 

三、IO流的四大抽象类:

             不管流的分类是多么的丰富和复杂,其根源来自于四个基本的类。这四大抽象类是所有IO流的父类,一般子类名后缀绝大部分是父类名称,而前缀都是体现子类功能的名字,这样方便记忆和查找子类。

这个四个类的关系如下:

 

字节流

字符流

输入流

InputStream

Reader

输出流

OutputStream

Writer

 

 

 

IO流的四大抽象类及其子类。请看以下表格:

分类

字节输入流

字节输出流

字符输入流

字符输出流

抽象基类

InputStream

OutputStream

Reader

Writer

访问文件

FileInputStream

FileOutputStream

FileReader

FileWriter

访问数组

ByteArrayInputStream

ByteArrayOutputStream

CharArrayReader

CharArrayWriter

访问管道

PipedInputStream

PipedOutputStream

PipedReader

PipedWriter

访问字符串

 

 

StringReader

StringWriter

缓冲流

BufferedInputStream

BufferedOutputStream

BufferedReader

BufferedWriter

转换流

 

 

InputStreamReader

OutputStreamWriter

对象流

ObjectInputStream

ObjectOutputStream

 

 

抽象基类

FilterInputStream

FilterOutputStream

FilterReader

FileWriter

打印流

 

PrintStream

 

 

推回输入流

PushbackInputStream

 

PushbackReader

 

特殊流

DataInputStream

DataOutputStream

 

 

 

 

四、读写字符文件的主要是用到FileReader和FileWriter,他们分 别是继承了,Reader和Writer,下面就写一个读取文件以及写入 数据到一个文件的例子。

 

import java.io.*;

public class FileOperate{

 

public static void main(String[] args){

try{

//读取read文件中的数据到FileReader流

FileReader fr = new FileReader("F:read.txt");

//把文件写入到FileWriter流

FileWriter fw = new FileWriter("F:writer.txt");

//创建存储字节数据的数组

char[] c = new char[1024];

int i = 0;

while((i=fr.read(c))!=-1){

fw.write(c,0,i);

             }

//将写入缓冲区的流刷出到文件中,当然关闭流时也会先刷出

fw.flush();

fw.close();

fr.close();

}catch(IOException e){

e.printStackTrace();

}

}

 

}

 

 

五、使用缓冲流加快数据的传输,可以提高读写效率。以上面的例子 说,字符 流缓冲流是BufferedReader和BufferedWriter

 

import java.io.*;

public class FileOperate{

 

public static void main(String[] args){

try{

//读取read文件中的数据到FileReader流

FileReader fr = new FileReader("F:read.txt");

//创建读取缓冲流BufferedReader

BufferedReader br = new BufferedReader(fr);

 

 

//把文件写入到FileWriter流

FileWriter fw = new FileWriter("F:writer.txt");

//创建写入缓冲流

BufferedWriter bw = new BufferedWriter(fw);

String line = null;

 

//在下面我们使用字符流缓冲流一次读取一行的方法readLine();

while((line=br.readLine())!=null){

bw.write(line);

//BufferedWriter 的换行方法newLine();

bw.newLine();

}

//将写入缓冲区的流刷出到文件中,当然关闭流时也会先刷出

fw.flush();

br.close();

bw.close();

}catch(IOException e)

{

e.printStackTrace();

}

}

 

}

 六、读写图片文件的主要是用到FileInputStream和FileOutputStream,他们分 别是继承了,InputStream和OutputStream,下面利用字节流复制图片的例子。

import java.io.*;
public class copy{


    public static void main(String[] args){
    
        
        try{
            FileInputStream fi = new FileInputStream("F://图片.jpg");
    
            FileOutputStream fo = new FileOutputStream("F://copy.jpg");
            
            byte[] b = new byte[1024];
            
            int i = 0;
            while((i = fi.read(b))!=-1){
                fo.write(b,0,i);
            }
            
            fi.close();
            fo.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    
    
    }

}


七、字节流缓冲流和字符流缓冲流使用方法差不多此处不再叙述。

八、字节流和字符流的相互转换

 

1、InputSreamReader用于将一个字节流中的字节解码成字符,OutputStream用于将写入的字符编码成字节后写入一个字节流

例:

Import java.io.*;

public class Convert{

public static void main(String[] args){

BufferedReader buf  =  null;

String str = null;

While(true){

System.out.println(“请输入:”)

try{

buf = new BufferedReader(new InputStreamRead(System.in));

 

str = buf.readLine();

System.out.println(str);

 

 

}catch(IOException e){

e.printStacktrace();

}

 

}

 

}

 

}

 

你可能感兴趣的:(java基础)