java IO知识总结

1 基本概念


java IO知识总结_第1张图片

java IO知识总结_第2张图片

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。 


根据处理数据类型的不同分为:字符流和字节流

根据数据流向不同分为:输入流和输出流

 

字符流和字节流

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:

读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。

处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

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

字节流和字符流转换

1、从字节流到字符流:InputStreamReader、OutputStreamWriter类可以实现。

2、从字符流到字节流:可以从字符流中获取char[]数组,转换为String,然后调用String的API函数getBytes() 获取到byte[],然后就可以通过ByteArrayInputStream、ByteArrayOutputStream来实现到字节流的转换

 * An InputStreamReader is a bridge from byte streams to character streams: It reads bytes and decodes them into characters using a specified charset.  The charset that it uses may be specified by name or may be given explicitly, or the platform's default charset may be accepted.

    public InputStreamReader(InputStream in, String charsetName)
        throws UnsupportedEncodingException
    {
	super(in);
	if (charsetName == null)
	    throw new NullPointerException("charsetName");
	sd = StreamDecoder.forInputStreamReader(in, this, charsetName);
    }

 * An OutputStreamWriter is a bridge from character streams to byte streams: 

参考:http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html


几点原则

1、不管是输入还是输出流,使用完毕后要close(),如果是带有缓冲区的输出流,应在关闭前调用flush()。

2、应该尽可能使用缓冲区,来减少IO次数,以提高性能。

3、能用字符流处理的不用字节流

4. 要缓冲:BufferedInputStream, BufferedOutputStream( 字节流) 

BufferedReader, BufferedWriter( 字符流) 

你可能感兴趣的:(java IO知识总结)