Java中字符流和字节流的区别以及主要的I/O体系
来源:互联网 发布:usb编程案例 编辑:程序博客网 时间:2024/05/16 12:41
I/O类是所有语言最常用的类之一,以前一直被java的I/O的各种类和其继承体系搞得比较乱,因为C++中的I/O标准类相对没java这么多,比较简洁。现在对java的I/O体系做一次简洁但是有效地归纳。
总而言之,java的I/O体系可以用美国两党制的模式来对照,分成共和党和民主党,就是字节流(OutputStream、InputStream)和其子类们(所谓的子类们一眼就能看得出,就是类名最后以OutputStream或者InputStream结尾),字符流(Writer、Reader)和其子类们(类名最后以Writer或者Reader结尾,比如FileWriter,明显是字符输出流的子类),还有一个绿党,那就是File类和其子类,这就是用来操作目录和文件的。
所谓的字符流是指该流类的读写是以字符为单位进行
所谓的字节流是指该流类的读写是以字节为单位进行
Java的I/O体系之所以比较复杂,归根结底跟java的字符类型char的编码有关,为什么C++没有分字节流和字符流得区分呢,那就是,C++的char类型是ascii编码,一个char变量只占用8个位一个字节,也就是说对于C++而言,一个字符就等于一个字节,所以对C++而言字符流跟字节流没什么区别。但是java不同,java采用了Unicode编码,这种编码的好处就是一个字符char能表示的语言文字比ascii码多的多,但是占用内存也增加,占用了两个字节,16位。所以就出现了所谓字符流和字节流的区分,一般读写文本文件使用字符流进行操作,但是处理二进制的图像之类的数据就用字节流处理。
记住这个原因,就能时时刻刻记住java的I/O体系为什么分成字符流和字节流,再加上一个File类,基本上代码中常用的I/O操作类就能了然于胸了,不会被纷杂的I/O类搞得无所适从。
在这里有个地方值得一提,就是为了加快字符流的读写速度,java给其加了小灶,增加了缓冲区,而字节流则没有,所以操作字符流时要常记得主动去刷新flush。当然字节流的子类也可以加上缓存区加快字节读取速度,总而言之,字符流是从源头父类就自带缓存区的,而字节流需要自己奋斗才能带上缓存区。
- Java中字符流和字节流的区别以及主要的I/O体系
- Java I/O流复习(二)—字符流、字符缓冲流、以及和字节流的区别
- java I/O 字节流和字符流的运用
- java-I/O File类(5)-Reader和Writer、OutputStreamWriter 、BufferedWriter、字节流和字符流的区别
- java-I/O File类(5)-Reader和Writer、OutputStreamWriter 、BufferedWriter、字节流和字符流的区别
- JAVA I/O中面向字节的InputStream和OutputStream以及面向字符的Reader和Writer简介
- JAVA I/O中面向字节的InputStream和OutputStream以及面向字符的Reader和Writer简介
- JAVA I/O中面向字节的InputStream和OutputStream以及面向字符的Reader和Writer简介
- I/O字节流和字符流的使用
- Java-Java I/O流解读之基于字节的I / O和字节流
- Java中的I/O流,包含字节流和字符流的常用介绍
- Java IO中字节流和字符流的区别
- Java中字节流和字符流的区别
- Java IO中字节流和字符流的区别
- Java IO中字节流和字符流的区别
- JAVA中字节流和字符流的区别 。
- java中字节流和字符流的区别
- Java中字符流和字节流的区别。
- es6箭头函数基本用法
- 智能家居:摆脱遥控器 动动嘴就搞定
- 使用Android Studio进行NDK开发和调试(gradle-experimental的使用)
- 分享一本不错的电子书《JavaScript半知半解》第1版
- Cloud Networking 云计算论文整理
- Java中字符流和字节流的区别以及主要的I/O体系
- 通过反射测试私有方法
- 六种常用UML关系(代码实例)
- js面向对象
- Buildroot用户指南
- 【讨论帖】初步接触LR性能测试工具,关于C语言脚本编程的malloc函数使用
- 中文语料库
- BootStrap--CSS布局--按钮
- 操作注册表