文档章节

JAVA_IO简记

蜀山下的鱼
 蜀山下的鱼
发布于 2015/04/29 00:43
字数 725
阅读 8
收藏 0

IO分两种流:

字节流 InputStream OutputStream

字符流 Reader  Writer

他们都是抽象类


具体实现 :
字节流 FileInputStream  FileOutputStream
字符流 FileReader    FileWriter


字节流转换成字符流可以用 InputSteamReader  OutputStreamWriter

       转换流的特点:

  1. 其是字符流和字节流之间的桥梁
  2. 可对读取到的字节数据经过指定编码转换成字符
  3. 可对读取到的字符数据经过指定编码转换成字节

        何时使用转换流?

  1. 当字节和字符之间有转换动作时;
  2. 流操作的数据需要编码或解码时。

         具体的对象体现:

  1. InputStreamReader:字节到字符的桥梁
  2. OutputStreamWriter:字符到字节的桥梁

这两个流对象是字符体系中的成员,它们有转换作用,本身又是字符流,所以在构造的时候需要传入字节流对象进来。

 



转换成BufferdReader  BufferedWriter 他们具有缓冲区 

比如:

new BufferedReader(new InputStreamReader(client.getInputStream()));

解释:

client.getInputStream()是字节流;

InputStreamReader把字节流转换成字符流;

BufferedReader缓冲字符流,使得能够使用readline()等方法,直接读取一行。


 

例如:读取文件 从字节流输入到字符流输入

FileInputStream fileInputStream = new FileInputStream("d:/text.txt");  // 定义一个指向D:/TEXT.TXT 的字节流

InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
//字节流转换成InputStreamReader

BufferedReader bufferedReader = new BufferedReader(inputSteamReader);
//InputStreamReader 转换成带缓存的bufferedReader
//可以把读出来的内容赋值给字符 

String ss = new String();
String s;
while((s = bufferedReader.readLine())!=null){
 ss += s;
}

例如:写入文件  从字节流输出到字符流输出

FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt"); //定义一个指向D:/TEXT.TXT文件字节流 

OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
//输出字节流装换为字符流
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
//输出字符流转换为缓冲流

bufferedWriter.write(s);

bufferedWriter.close();//关闭缓冲字符流
outputStreamWriter.close();//关闭输出字符流
fileOutputStream.close();//关闭字节流



补充:

对于我们常用的GBK中,英文是占用1个字节,中文是2个
对于UTF-8,英文是1个,中文是3个
对于Unicode,英文中文都是2个

java中char占用两个字节,而byte占用一个字节。

一句话概括:字节流是由字节组成的,字符流是由字符组成的.Java里字符由两个字节组成.

 

扩展:字节流是最基本的,字符流是为了处理字符而提出来的。所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化

 

补充:实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。



本文转载自:http://blog.csdn.net/caiwenfeng_for_23/article/details/8445445

蜀山下的鱼
粉丝 9
博文 405
码字总数 0
作品 0
广州
高级程序员
私信 提问
Java FileInputStream

一、序言 IO操作,才程序中比较普遍,JAVA 中提出了IO/NIO 的概念,也一直在说NIO 比IO快,一直不知道原因,就想memcache 和ehcache 比较优劣一样,这些东西得自己看看如何实现的,才 知道区...

pczhangtl
2014/08/03
172
0
泥沙砖瓦浆木匠/java-core-learning-example

感谢赞助的ta们 Java 核心系列教程,关于Java核心技术学习积累的例子,是初学者及核心技术巩固的最佳实践。 包括基础语法,OOP,字符串,集合,IO,反射,线程,网络等。 未完成模块:阿里J...

泥沙砖瓦浆木匠
04/02
0
0
cloud foundry简记

router 所有request的路由入口 管理request 路由到AppLife Management 对app的request 路由到Appexecution(或DEAs) router上层有LB 不属于cloud-foundry 实现 基于nginx DEA(Droplet Executi......

深蓝苹果
2013/05/07
272
0
聊聊java String的intern

序 本文主要研究一下java String的intern String.intern() java.base/java/lang/String.java 当调用intern方法时,如果常量池已经包含一个equals此String对象的字符串,则返回池中的字符串 ...

go4it
04/06
23
0
DirectByteBuffer更快吗?

ByteBuffer.allocateDirect vs ByteBuffer.allocate 操作系统的IO机制 操作系统在内存区域上执行IO操作,这些内存区域是连续的字节。毫无疑问只有字节缓冲区才有资格参与IO操作的。同样操作系...

智深
2012/12/04
2.5K
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
4
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部