关于输入输出流

输入输出流学习

一、字节流

输入字节流:

|----------|InputStream 输入字节流的基类,抽象类

|----------------|FileInputStream

|----------------|BufferedInputStream 缓冲输入字节流

输出字节流:

|----------|OutPutStream 输出字节流基类

|----------------|FileInputStream

|----------------|BufferedOutPutStream

什么时候使用字节流: 读取到的数据不需要编码或解码的情况,不如图片数据。

Demo1 以 字节流 形式向文件输入、输出数据

import java.io.*;

public class InOutStream

{

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

  //向文件写入数据

  File file = new File("F://a.txt"); //创建文件对象

  String str = "我有一头小毛驴,但我也不骑!";

      FileOutputStream fos = new FileOutputStream(file); 

     //创建文件输出流对象

  fos.write(str.getBytes()); //从内存写入文件中(write(byte[])

  FileInputStream fis = new FileInputStream(file);

  //创建文件输入流对象

  byte []buffer = new byte[1024]; //定义缓冲区

  int len = -1;

  len = fis.read(buffer);

  // read(byte[]b) 从输入流读取一定数量字节,并将其存放到 

  //同时,以int形式返回读取的字节数

  String fileData = new String(buffer,0,len);//byte[]->string

  System.out.println("文件内容:"+fileData);

}

}

   使用FileInputStreamFileOutPutStream类向文件写入与读出数据时,都存在一点不足,即这两个类都只提供对字节或字节数组的读取方法。由于汉字在文件中占两个字节,如果使用字节流读取不好可能会出项乱码现象。 此时采用字符流 Reader 和 Writer 即可避免。

二、字符流

字符流 字节流 编码(解码)

输入字符流:

|---------------| Reader 所有输入字符流的基类,抽象类

|------------------|FileReader 读取文件字符的输入字符流

|------------------|BuferedReader 维护了8192个长度的字符数组

输出字符流:

|---------------| Writer所有输出字符流的基类。

|------------------|FileWriter

|------------------|BufferedWrite

什么情况下使用字符流:读取都是字符流

 Demo 2 以 字符流 形式向文件写入、读取数据

import java.io.*;

public class FileWR

{

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

 File file = new File("F://b.txt");

     FileWriter fw = new FileWriter(file);

 String str = "梦里一吧杀猪刀!";

 fw.write(str);

 fw.close();

 FileReader fr = new FileReader(file);

 char []buffer = new char[1024];

 int len = -1;

 len = fr.read(buffer);

 String fileData = new String(buffer,0,len);

 System.out.println("文件内容: "+ fileData);

 fr.close();

}

}

三、转化流

      输入字节流转换流 

              InputStreamReader

      输出字节转换流

              OutputStreamWriter

      转换流的作用:

          1、可以把对应的字节流转换成字符流使用

          2、指定编码类型

Demo3 转换流的作用

import java.io.*;

public class ChangeStream

{

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

// Test_1();

 Test_2();

}

public static void Test_1()throws IOException{

      

 InputStream input = System.in;// 标准输入流

     int str = input.read();//一个字节一个字节的读

     //当输入: abc 时,只能输出 97a) 。

 System.out.println(""+str);

}

public static void Test_2()throws IOException{

  

 InputStream input = System.in;

     InputStreamReader isr = new InputStreamReader(input);//字符转化流,将标准输入 流转变为字符,此处可以指定字符集

    

 BufferedReader br = new BufferedReader(isr);//

 String str = br.readLine();// 行读取数据

     System.out.println(""+str);

}

}

原文地址:https://www.cnblogs.com/he-shao/p/5848160.html