java中字节流和字符流的区别
流分类:
1.Java的字节流
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
2.Java的字符流
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new
Java 内用 Unicode 编码存储字符
字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串
而字节流处理单元为 1 个字节,操作字节和字节数组。
所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!
如果是音频文件、图片、歌曲,就用字节流好点
如果是关系到中文(文本)的,用字符流好点
类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换。
字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高。
字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的
而字符流在操作的时候是使用到缓冲区的

操作流程
在Java中IO操作也是有相应步骤的,以文件操作为例,主要的操作流程如下:
1 使用File类打开一个文件
2 通过字节流或字符流的子类,指定输出的位置
3 进行读/写操作
4 关闭输入/输出
IO操作属于资源操作,一定要记得关闭
字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,
但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容
那开发中究竟用字节流好还是用字符流好呢?
字符流只能处理字符类型(char,纯文本可以用字符流,比如汉字,传输de时候要查询编码表,得到汉字对应的字符),
而字节流可以处理任何类型(比如图片,视频,是以二进制传输的)
在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。
如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)。
注意:
在客户端的一次请求中,getOutputStream和getWrite这两个方法是互斥的。
调用了其中的一个,就不能在调用另外一个
比如在一个servlet中出现这两个方法是肯定不对的。
另外:
如果在一个servlet1中写
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.getOutputStream();
this.getServletContext().getRequestDispatcher("/servlet/servlet2").forward(request, response);
}
}
在servlet2中使用getWrite()
或者在servlet1中写
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.getOutputStream();
response.sendRedirect("servlet/servlet2");
}
}
在servlet2中使用getWrite()
上面的第一种写法是错的,第二种写法是对的
因为第一种是转化,转化只是同一次请求
第二种是重定向,重定向是发起一个新的请求
java中字节流和字符流的区别的更多相关文章
- java中字节流与字符流的区别
字节流 在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字 ...
- Java中字节流和字符流的比较(转)
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...
- Java中字节流和字符流复制文件
字节流和字符流复制文件的过程: 1.建立两个流对象 绑定数据源和目的地 2.遍历出需复制的文件写入复制过后的新文件中(只不过是遍历的时候是区分字节和字符的) 3.访问结束后关闭资源 字节流复制文件: ...
- java中字节流与字符流以及字节流多余字节问题
1.字节流 字节流byte为单位对文件的数据进行写入与读取操作.字节的方式在复制音频图片文件时比较适用,但在对于普通文件的读写上有两大缺陷: 第一,字节流在读取中文字符时,若设定的字节数组长度刚好末尾 ...
- java 字节流和字符流的区别 转载
转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...
- java 字节流和字符流的区别
转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...
- Java进阶(四十五)java 字节流与字符流的区别
java 字节流与字符流的区别(转载) 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作 ...
- java 字节流与字符流的区别详解
字节流与字符流 先来看一下流的概念: 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入 ...
- java IO的字节流和字符流及其区别
1. 字节流和字符流的概念 1.1 字节流继承于InputStream OutputStream, 1.2 字符流继承于InputStreamReader OutputStre ...
随机推荐
- 安装brew
brew brew 又叫Homebrew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常方便. 安装brew 打开终端窗口, 粘贴以下脚本: ru ...
- Session技术详解
1.session简介 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务器程 ...
- 10集合:List<T>,Dictionary<K,V>
List<T>泛型集合 List<T>是C#中一种快捷.易于使用的泛型集合类型,使用泛型编程为编写面向对象程序增加了极大的效率和灵活性. 1.List<T>用法 ...
- gulp-htmlmin可以压缩html的gulp插件
通过一条命令用Npm安装gulp-htmlmin: npm install gulp-htmlmin --save-dev 安装完毕后,打开gulpfile.js文件,我们里面编写一个task用来专门 ...
- javascript基础学习(六)
javascript之对象 学习要点: 对象的属性和方法 对象的原型 一.对象 对象其实就是一种引用类型,而对象的值就是引用对象的实例. 二.创建对象 在javascript中有两种对象,一种是系统内 ...
- Ubuntu1404+Django1.9+Apache2.4部署配置1安装
关于Ubuntu环境下的文章很少,搜索一些问题比较麻烦,这里将别人的做法和自己做的整合一下.这篇文章主要讲解基础的安装,至于Django1.9如何部署到Apache2.4请转到下一篇博文http:// ...
- Codeforces 527E Data Center Drama(欧拉回路)
题意: 给定一个无向图连通图,把这个的无向边变成有向边,并添加最少的有向边使这个图每个结点的出度为偶数. Solution: 题目很长,并且很多条件说的不太直接,确实不太好懂. 首先先看得到的无向图, ...
- magento前台访问错误
前台访问出现错误 General error: 145 Table './dbname/tablename' ismarked as crashed and should be repaired 解决 ...
- Javascript跳转手机站代码
$(document).ready(function(){ var mobileAgent = new Array("iphone", "ipod", &quo ...
- UFLDL实验报告3:Self-taught
Self-taught 自我学习器实验报告 1.Self-taught 自我学习实验描述 自我学习是无监督特征学习算法,自我学习意味着算法能够从未标注数据中学习,从而使机器学习算法能够获得更大数量的数 ...