必威体育Betway必威体育官网
当前位置:首页 > IT技术

InputStream 、 InputStreamReader 、 BufferedReader区别及使用

时间:2019-06-07 13:45:09来源:IT技术作者:seo实验室小编阅读:78次「手机版」
 

inputstreamreader

源码地址:https://gitee.com/qq1319426493/io/tree/master

1、InputStream、outputstream区别

1.1)InputStream:是表示输入字节流所有类的超类,一般我们使用它的子类,如fileinputstream等.

import java.io.FileInputStream;

public class InputStream {

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

		FileInputStream fis = new FileInputStream("F://test.txt");
		int i;

		while ((i = fis.read()) != -1) {
			System.out.println(i);
		}
		/**
		* 文件内容:“ www.baidu.com”,输出结果:
		* 
		*   119
		*	119
		*	119
		*	46
		*	98
		*	97
		**	105
		*	100
		*	117
		*	46
		*	99
		*	111
		*	109
		* 
		*/

	}

}

1. 2)OutputStream:表示输出字节流所有类的超类。输出流接受输出字节并将它们发送到某个接收器。一般我们使用它的子类,如FileOutputStream等.

import java.io.File ;
import java.io.OutputStream ;
import java.io.FileOutputStream ;
public class OutputStream1{
    public static void main(String args[]) throws Exception{    // 异常抛出,不处理
        // 第1步、使用File类找到一个文件
        File f= new File("F://test.txt") ;    // 声明File对象
        // 第2步、通过子类实例化父类对象
        OutputStream out = null ;    // 准备好一个输出的对象
        out = new FileOutputStream(f)  ;    // 通过对象多态性,进行实例化
        // 第3步、进行写操作
        String str = "hello world!!!" ;        // 准备一个字符串
        byte b[] = str.getBytes() ;            // 只能输出byte数组,所以将字符串变为byte数组
        out.write(b) ;                        // 将内容输出,保存文件
        // 第4步、关闭输出流
        out.close() ;                        // 关闭输出流
        //文件不存在会自动创建
    }
};

2、inputstreamreader  、outputstreamwriter区别

2.1)InputStreamReader :InputStreamReader是从字节流到字符流的桥接器:它读取字节并使用指定的字符将它们解码为字符charset。它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。每次调用一个InputStreamReader的read()方法都可能导致从底层字节输入流中读取一个或多个字节。

import java.io.*;
/**
 * 
 * 
 *InputStreamReader封裝了InputStream在里头,
 它以较高级的方式,一次读取一个一个字符,
 下例是假设有一个编码为utf8的文档,
 其內容 "www.baidu.com"
 *
 */
public class InputStreamReader1 {

	public static void main(String[] args) throws Exception {
		
		 FileInputStream fis=new FileInputStream("F://test.txt");     
             InputStreamReader isr=new InputStreamReader(fis,"utf-8");     
             int i;     
             while((i=isr.read()) != -1){     
                 System.out.println((char)i);  
                 //文件内容:www.baidu.com     輸出  www.baidu.com     
             }     
             
	}
}

为了实现字节到字符的有效转换,可以从基础流中提取比满足当前读取操作所需的更多字节。为了获得最高效率,考虑在BufferedReader中包装InputStreamReader。

例如: BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

2.2)OutputStreamWriter:OutputStreamWriter是从字符流到字节流的桥接:写入它的字符使用指定的字节编码为字节charset。它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。

每次调用write()方法都会导致在给定字符上调用编码转换器。生成的字节在写入底层输出流之前在缓冲区中累积。可以指定此缓冲区的大小,但默认情况下,它足够大,可用于大多数用途。请注意,传递给write()方法的字符不会被缓冲。为了获得最高效率,请考虑在BufferedWriter中包装OutputStreamWriter,以避免频繁的转换器调用

例如: Writer out = new BufferedWriter(new OutputStreamWriter(System.out));

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class OutputStreamWriter1 {
	
	public static void main(String[] args) throws IOException {
		 File file= new File("F://test.txt") ;    // 声明File对象
		 
		 FileOutputStream fileOutputStream = new FileOutputStream(file);
		 
		OutputStreamWriter osr = new OutputStreamWriter(fileOutputStream);// 输出 往out里面准备写内容,内容在下面
		String str = "Hello World1!";
		osr.write(str);// 写
		// osr.flush();//如果用于网络传输,记得强制刷新缓冲区,否则输出的数据只停留在缓冲区中,而无法进行网络传输
		osr.close();// 关闭资源
	}
}

3、BufferedReader 、BufferedWriter

3.1)BufferedReader :从字符输入流中读取文本,缓冲字符,以便有效地读取字符,数组和行。

可以指定缓冲区大小,或者可以使用默认大小。对于大多数用途,默认值足够大。

通常,有Reader构成的每个读取请求都会导致相应的读取请求有基础字符火字节流构成,因此,建议将BufferReader包装在任何read()操作可能代价较为高昂的Reader上,例如FileReaders、InputStreamReaders。

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.filenotfoundException;
import java.io.InputStreamReader;

/**
 * 
 * @author wangchl
 *
 *
 *BufferedReader则是比InputStreamReader更高级,
 *它封裝了StreamReader类,
 * 一次读取取一行的字符
 */
public class BufferedReader1 {

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

		FileInputStream fis = new FileInputStream("F://test.txt");

		try {
			InputStreamReader isr = new InputStreamReader(fis, "utf8");
			BufferedReader br = new BufferedReader(isr);

			String line;
			while ((line = br.readLine()) != null) {
				System.out.println(line);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printstacktrace();
		}
	}

}

例如:BufferedReader in = new BufferedReader(new FileReader(“foo.in”));

将缓冲指定文件的输入,如果没有缓冲mread() 或readerLine()  的每次调用都可能导致从文件中读取字节,转换为字符,然后返回,非常抵消,

3.2)BufferedWriter:将文本写入字符输入流,缓冲字符,以便地写入单个字符,数字和字符串。

可以指定缓冲区大小,或者可以接受默认大小,对于大多数用途,默认值足够用了

提供了一个newLine()方法,它使用平台自的分行隔符概念。并非所有的平台都是用换行符  “\n”  来终止行,因此,调用此方法终止输出行比直接写换行符更为可取。通常,Writer会立即将其输出发送到基础字符或字节流,除非需要提示输出,否则将BufferedWriter包装在任何write() 操作可能代价高昂的Writer周围

import java.io.BufferedWriter;
import java.io.FileWriter;

public class BufferedWriter1 {

	public static void main(String[] args) throws Exception {
		 FileWriter output = null;
	        BufferedWriter writer = null;
	        try{
	            output = new FileWriter("F://test.txt");
	            writer = new BufferedWriter(output);
	            writer.write("dasdasdfgsgsgsfasdf asdfsfds fdsfdsf");
	        }finally{
	            if(null != writer){
	                    writer.close();
	            }
	            if(null != output){
	                    output.close();
	            }
	        }
	}
}

例如:printwriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));

将PrintWriter的输出缓冲到文件,如果没有缓冲,每次调用print()  方法都会导致字符转换为字节,然后立即写入文件,但效率很低

相关阅读

java基础知识之FileInputStream流

一、File流概念   JAVA中针对文件的读写操作设置了一系列的流,其中主要有FileInputStream,FileOutputStream,FileReader,FileWri

include 和 include_once 的区别

include 和 include_once 的区别 include 会将指定的文件载入并执行里面的程序;重复引用加载多次。include_once 函数会将指定的

break 和continue 区别以及用法。

今天我们来介绍一下循环里的break 和continue的用法以及区别 想搞清楚break 和continue的用法以及区别必须要记住的两件两句话!

品牌运营与品牌营销区别何在?

运营的本质是什么?品牌营销与品牌运营最大的区别又是什么?运营的本质在《从零开始做运营》里,我说:「一切能够帮助产品进行推广、促进

86年版五笔和98年版五笔区别

五笔有两个版本:86五笔与98规范王码(简称98王码,有人按86的习惯叫为98五笔)。但98王码的教程不多,网络上很不好找。这个版块贴过的几篇

分享到:

栏目导航

推荐阅读

热门阅读