java IO核心类库梳理

以前每次使用java I/0类库时都要搜索,今天梳理了一下,把I/O核心类串了起来

流代表任何有能力产生数据的数据源对象或者是有能力接收数据的接收端对象。“流”屏蔽了IO设备中处理数据的细节。任何自InputStream或Reader派生而来的类都含有read()方法,用于读取单个字节或字节数组。同样,任何自OutputStream或Writer派生而来的类都含有write()方法,用于写取单个字节或字节数组。

1. InputStream/OutputStream继承结构仅支持8位字节流

在某些场合,面向字节的InputStream和OutputStream是合适的解决方案,比如java.util.zip就是面向字节而不是面向字符的。

2. Reader/Writer继承结构提供兼容Unicode与面向字符的I/O功能

3.InputStreamReader/OutputStreamWriter是字节流和字符流转换的桥梁

An InputStreamReader is a bridge from byte streams to character streams: It reads bytes and decodes them into characters using a specified {@link java.nio.charset.Charset 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.
An OutputStreamWriter is a bridge from character streams to byte streams:Characters written to it are encoded into bytes using a specified {@link java.nio.charset.Charset 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.

字节流和字符流转换需要提供编码格式(若不提供,由平台决定默认的编码格式),使用时需注意。

/**
     * Returns the default charset of this Java virtual machine.
     *
     * <p> The default charset is determined during virtual-machine startup and
     * typically depends upon the locale and charset of the underlying
     * operating system.
     *
     * @return  A charset object for the default charset
     *
     * @since 1.5
     */
    public static Charset defaultCharset() {
        if (defaultCharset == null) {
            synchronized (Charset.class) {
                String csn = AccessController.doPrivileged(
                    new GetPropertyAction("file.encoding"));
                Charset cs = lookup(csn);
                if (cs != null)
                    defaultCharset = cs;
                else
                    defaultCharset = forName("UTF-8");
            }
        }
        return defaultCharset;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java 语言支持的类型分为两类:基本类型和引用类型。整型(byte 1, short 2, int 4, lon...
    xiaogmail阅读 1,369评论 0 10
  • 概述 java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。java.io ...
    Steven1997阅读 9,244评论 1 25
  • 余禾在黑暗笼罩的人群中艰难地迈着步子,她集中精神默数着自己扑扑跃动的心跳,以抵御周遭逐渐逼近的恐惧。她一脚迈进了八...
    白小科阅读 470评论 0 3
  • 太阳之为病,脉浮,头项强痛而恶寒。 太阳病,发热,汗出,恶风,脈缓者,名为中风。 太阳病,或已发热,或未发热,必恶...
    两颗蛀牙阅读 580评论 0 0
  • 许多事情无法知晓的,许多知晓的也无法言明。在最最无法言明的感觉里,我总是要被抛弃,落到笔直的国道上。 这个世界没什...
    Molly_zhang阅读 141评论 0 0