10 IO流之——深入了解字符流

一  编码表

二 转换流(把字节流转换为字符流)

字符流=字节流+编码表

OutputStreamWriter 字符输出流
     public OutputStreamWriter ( OutputStream out):根据默认编码把字节流的数据转换为字符流
     public OutputStreamWriter ( OutputStream  out,String  charsetName )根据指定编码把字节流数据转换为字符流
 InputStreamReader 字符输入流
     public InputStreamReader ( InputStream in) 用默认的编码读取数据
     public InputStreamReader ( InputStream  in,String  charsetName )用指定的编码读取数据

package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
 *public OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流
 *public OutputStreamWriter(OutputStream out,String charsetName)根据指定编码把字节流数据转换为字符流
 *
 *public InputStreamReader(InputStream in) 用默认的编码读取数据
 *public InputStreamReader(InputStream in,String charsetName)用指定的编码读取数据
 */
public class IoDemo10 {
	public static void main(String[] args) throws IOException {
// 		System.out.println("写数据——————————————————————————————————");
		//创建对象默认字符
//		OutputStreamWriter osw = new OutputStreamWriter( new FileOutputStream("a.txt"));
		//创建对象指定字符集
// 		OutputStreamWriter osw = new OutputStreamWriter( new FileOutputStream("a.txt"),"UTF-8");
 		//写数据
//		osw.write("中国");
		System.out.println("读取数据——————————————————————————————————");
		
		//创建对象默认字符
		InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"utf-8");
		int by = 0;
		while((by=isr.read())!=-1){
			System.out.print((char)by);
			
		}
		//释放资源
//      	osw.close();
		isr.close();
	}
}
注意:保证写数据和写数据的编码一致

OutputStreamWriter字符转换流 写数据的5种方法
   public void write( int c) 写一个字符
   public void write(char[] cbuf ) 写一个字符数组
   public void write(char[] cbuf,int off,int len ) 写一个字符数组一部分
   public void write(String str )写一个字符串
   public void write(String str,int off,int len )写一个字符串的一部分

OutputStreamWriter字符转换流 读数据的2种方法
  public int read()
  public int read(char[] cbuf )

转换流 提供了对应的子类
FileWriter
FileReader

三 高效流

字符流为了高效读写,也提供了对应的字符缓冲流

   BufferedWriter   字符缓冲输出流

   BufferedReader   字符缓冲输入流

package Stream;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 字符流为了高效读写,也提供了对应的字符缓冲流
    BufferedWriter   字符缓冲输出流
    BufferedReader   字符缓冲输入流
 */
public class TestDemo02 {
	public static void main(String[] args) throws IOException  {
		/*//创建字符缓冲输出流
		BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
		//写数据
		bw.write("hello");
		bw.write("world");
		bw.write("java");
        //释放资源
		bw.close();*/
		//创建字符缓冲输入流
		BufferedReader br = new BufferedReader(new FileReader("bw.txt"));
		//读数据
        char[] ch = new char[1024];
        int len = 0;
        while((len=br.read(ch))!=-1){
    	   System.out.print(new String(ch,0,len));
        }
        //释放资源
        br.close();
	
	}
}

字符缓冲流的特殊功能

字节缓冲流的特殊方法
   BufferedWriter
        public void newLine() 根据系统来决定换行符
   BufferedReader
        public String readLine() 一次读取一行数据

package Stream;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

/**
 * 字节缓冲流的特殊方法
 * BufferedWriter
 * public void newLine() 根据系统来决定换行符
 * BufferedReader
 * public String readLine() 一次读取一行数据

 */
public class TestDemo09 {
	public static void main(String[] args) throws IOException  {
		Writer();
		Reader();
		
	}
	public static void Reader() throws IOException {
		BufferedReader br = new BufferedReader(new FileReader("zxx.txt"));
        String line = null;
        while((line= br.readLine())!=null){
        	System.out.println(line);
        }
        br.close();
		
	}
	public static void Writer() throws IOException {
		BufferedWriter bw = new BufferedWriter(new FileWriter("zxx.txt"));	
		for(int i =0;i<=10;i++){	
		bw.write("hello"+i);
		bw.newLine();
		}
	    bw.close();
		
	}
}



猜你喜欢

转载自blog.csdn.net/zhangxinxin1108/article/details/80046362