Java输入输出流笔记

来源:互联网 发布:淘宝大号怎么关联小号 编辑:程序博客网 时间:2024/06/05 17:52

1.IO流

1.1、输入输出相对于程序运行内存而言。从内存到硬盘是输出,从硬盘到程序是输入


1.2、输入流的基类包括InputStream和Reader,输出流的基类包括OutputStream和Writer。字节流包括InputStream、OutputStream;字符流包括Reader和Writer。字节是机器能读懂的二进制码1010、字符是经过解码的汉字字母等。


1.3、IO流的入门级实现类:InputStream---->FileInputStreamOutputStream---->FileOutputStream

       Reader---->FileReader Writer---->FileWriter

     stream结尾的是字节流,Reader/Writer结尾的事字符流


1.4、输入流的常用方法:

1.4.1    int read():从输入流去处单个字节,读取的字节数据转换成int型(ANSII值)返回;   

                       ---->对应的 字符流中的方法    int read()

1.4.2    int read(byte[ ] b):从输入流中一次性读取b.length个字节,并存储在数组b中,返回读取的字节数;      

                       ---->对应的 字符流中的方法    int read(char[ ] b)

 读取结束的标志是read(byte[ ] b)/read(char[ ] b)返回-1

1.4.3    int read(byte[ ] b,int off,int len):从输入流中读取len长度的字节,存放入数组b中,存放的起始位置是offf所指向的下标

      ---->对应的 字符流中的方法    int read(char[ ] b,int  off,int len)


1.5、输出流的常用方法:

1.5.1以字符为单位的操作

1.5.1.1    void write(int c):将指定的字节/字符c输出到输出流

1.5.1.2    void write(byte[ ]/char[ ] buf):将直接/字符数组中的数据输出到输出流

1.5.1.3    void write(byte[ ]/char[ ] buf,int off,int len):将字节/字符数组从数组的off位置开始,输出长度为len的字节/字符输出到输出流

1.5.2以字符串为单位的操作   

1.5.2.1     void write(String str):将str字符串里包含的字符输出到指定的输出流、

1.5.2.2     void write(String str,int off, int len):将str字符串里从off位置开始,长度为len的字符输出到指定输出流

1.6.输入输出IO流的例子:

public void class IOTest{

public static void main(String[] args) throw IOException{

FileInputStream fis = new FileInputStream("test.txt");   //用实现类创建一个输入流fis并指向要读取的文件

FileOutputStream fos = new FileOutputStream("newTest.txt"); //用实现类创建一个输出流fis并指向要输出到的文件

byte[ ] buf = new byte[1024];//定义一个长度为1024字节数组用作缓冲数组

int hasRead = 0;

while((hasRead = fis.read(buf)) !=-1 ){

fos.write(buf,0,hasRead);

fis.close();

fos.close(); 

}

}

2.缓冲流

    2.1.1缓冲字节流

         IO包提供BufferedInputStream和BufferedOutputStream两个流作为缓冲流,这两个流内部都定义一个8192的字节数组,当调用read()或write()方法读写数据时,首先将数据写入定义好的字节数组中,然后将字节数组的数据一次性写到文件中。作用类似于1.6中的数组buf。‘他们在构造方法中接收InpuStreamt和OutputStream两个类型的参数作为被包装对象,在读写数据时提供缓冲功能。

    2.1.2例子

public class Example{

//用FileInputStream实现类创建一个字节输入流,并将其作为参数传入缓冲输入流BufferedInputStream中

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("src.txt"));

//同样方式创建一个带缓冲的输出流

BufferedOutputStream bos  = new BufferedOutputStream(new FileOutputStream);

while((len = bis.read()) != -1){

bos.write(len);

}

bis.close();

bos.close();

}

2.2.1缓冲字符流

字符流同样提供带缓冲的包装流,分别是BufferedReader和BufferedWriter.在BufferedReader中有一个重要的方法readLine(),该方法用于一次读取一行文本,返回String类型

2.2.2例子

public class Example{

public static void main(String[ ] args) throws Exception{

//用FileReader实现类创建一个输入字符流,并将其作为参数传入缓冲字符流中

BufferedReader br= new BufferedReader(FileReader(src.txt));

BufferedWriter bw = new BufferedWriter(FileWriter("des.txt"));

String str = null;

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

bw.write(str);

bw.newLine();写入一个换行符

}

br.close();

bw.close();

}

}


3. IO转换流

输入输出流提两个转换流用于实现字节流转换成字符流:InputStreamReader用于将输入字节流转换成输入字符流;OutputStreamWriter用于将字节输出流转换成字符输出流。下面以获取键盘输入为例来介绍转换流的用法:

Java使用System.in代表标注输入,即键盘输入,但这个标准输入时InputStream类的实例,使用不太方便,而且键盘输入的内容都是文本内容,所以可以使用InputStreamReader将其转换成字符流;普通的Reader读取输入内容时效率较低,可以讲普通的Reader包装成BufferedReader,利用其readLine()方法一次读取一行内容。

例:

public class Example{

public static void main(String[ ] args) throw IOException {

//System.in是字节流,将其转换成字符流对象

InputStreamReader reader = new InputStreamReader(System.in);

//将字符流Reader封装成带缓存的字符流

BufferedReader brread = new BufferedReader(reader);

String str = null;

while((str = brread.readLine())!=null){

if(str.equals("exit"))

{

System.exit(1);

}

System.out.printlin("输入的内容为:"+str);

}

}

}



0 0
原创粉丝点击