dataoutputstreammWriter为啥是字符流通向字节流的桥梁

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
目前就职于XX银行开发中心:大数据生产环境负责人
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(1145)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'IO流分:字节流和字符流',
blogAbstract:'IO流:(重要)用于处理设备上数据。流:可以理解数据的流动,就是一个数据流。IO流最终要以对象来体现,对象都存在IO包中。流也进行分类:1:输入流(读)和输出流(写)。2:因为处理的数据不同,分为字节流和字符流。&字节流:处理字节数据的流对象。设备上的数据无论是图片或者dvd,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据。',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:5,
publishTime:0,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:1,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'目前就职于XX银行开发中心:大数据生产环境负责人',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}java流问题_百度知道Java程序问题_百度知道Java 基础知识之I/O系统_要往高处走_天涯博客
今日访问:[$DayVisitCount$]
总访问量:457
开博时间:
博客排名:暂无排名
   本文主要是讲述Java 基础知识之I/O系统,多线程并发处理,更多Java技术知识,请登陆疯狂软件教育官网。
  编程语言的I/O类库中常常使用流这个抽象的概念,它代表任何有能力产生数据的数据源对象或时有能力接收数据的接收端对象。&流&概念源于UNIX中的管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等,它屏蔽了实际的I/O设备中处理数据的细节。 一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。 流的方向是重要的,根据流的方向,流可以分为两类:输入流和输出流。其实输入/输出是想对于内存来说的。 实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对于输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,只是简单地往流中写数据。
  a.流:一组有序的数据序列。
  b字节流:数据流中最小的数据单元是字节。
  c.字符流:数据流中最小的数据单元是字符。
  一. java.io包中的类对应两类流
  一类流直接从指定的位置(如磁盘文件或内存区域)读或写,这类流称为结点流,其他的流则称为过滤流(包装流)
  过滤流:一些流可以从文件以及其他地方接收字节,另一些流可以将字节组合成更有用的数据类型。将一个已经存在的流传递给另一个流的构造方法,将这两种流结合起来,结合后的流被称为过滤流。过滤器输入流往往是以其它输入流作为它的输入源,经过过滤或处理后再以新的输入流的形式提供给用户,过滤器输出流也类似。我们很少用单一的类来创建流对象,而是通过叠合多个对象来提供所期望的功能(即装饰器设计模式)。
  java的常用输入、输出流其实都是继承自4个抽象类,分别是:
  基于单字节的InputStream,OutputStream类(面向字节形式的I/O)
  基于双字节的Unicode代码单元的 Reader, Writer类(面向字符形式的I/O)
  一旦打开输入流后,程序就可从输入流串行地读数据。从输入流读/写数据的过程一般如下:打开一个流通道--&读取/写信息--&关闭流通道。
  在java平台中,有以下两种方式能获得本地平台的字符编码类型:
  (a)System.getProperty("file.encoding");
  (b) Charset cs=Charset.defaultCharset();
  所有的输入流、输出流都可以分为字节(输入、输出)流,字符(输入、输出)流,处理字节的主要是(OutputStream/InputStream) 系列,处理字符的,主要是(Reader/Write)系列
  二.以字节(Byte)为导向的输入流(InputStream系列),这几个类都可以与FileInputStream对象相连以提供有用接口:
  ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
  StringBufferInputStream(在java1.1中已经弃用了):把一个String对象作为InputStream,底层实现使用StringBuffer
  FileInputStream:把一个文件作为InputStream,实现对文件的读取操作(文件名、文件、FileDescriptor对象)
  PipedInputStream:实现了pipe的概念,主要在线程中使用(作为多进程中的数据源)
  SequenceInputStream:把多个InputStream合并为一个InputStream
  以字节(Byte)为导向的输出流(OutputStream系列),可以与FilterOutputStream对象相连以提供有用接口:
  ByteArrayOutputStream:在内存中创建缓冲区,把信息存入内存中的一个缓冲区中,缓冲区初始化尺寸(可选)
  FileOutputStream:把信息存入文件中(文件名、文件、FileDescriptor)
  PipedOutputStream:实现了pipe的概念,主要在线程中使用(指定用于多线程的数据的目的地)
  三.与之对应的(Reader/Writer)系列:
  Reader: 与InputStream相对应,适配器InputStreamReader
  Writer: 与OutputStream相对应,适配器为OutputStreamWriter
  FileReader: 与FileOutputStream相对应
  FileWriter: 与FileOurputStream相对应
  StringReader: 无相对应的类
  StringWriter: 与ByteArrayInputStream相对应
  CharArrayReader: 与ByteArrayOutputStream相对应
  CharArrayWriter: 与ByteArrayOutputStream相对应
  PipedReader: 与PipedInputStream相对应
  PipedWriter: 与PipedOutputStream相对应
  四.两种不限导向的stream之间的转换(使用适配器类)
  InputStreamReader和OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream。
  InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集
  五.通过FilterInputStream从InputStream读取数据:
  DataInputStream:从stream中读取基本类型(int、char,long等)数据。
  BufferedInputStream:使用缓冲区 ,使用它可以防止每次读取都得进行实际的读操作
  LineNumberInputStream:会记录input stream内的行数,然后可调用getLineNumber()和setLineNumber(int)
  PushbackInputStream:很少用到,一般用于编译器开发
  通过FilterOutputStream向OutputStream写入:
  DataIOutputStream:可以按照移植方式往stream中输出基本类型(int、char,long等)数据。
  BufferedOutputStream:使用缓冲区 ,使用它可避免每次发送数据都进行实际的写操作
  PrintStream:产生格式化输出 ,其中DataOutputStream处理数据的存储,PrintStream处理显示
  六.更改流的行为
  尽管BufferedOutputStream是FilterOutputStream的子类,但是BufferedWriter并不是FilterWriter的子类,(FilterWriter是抽象类,没有任何子类)
  没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream
  BufferedReader:与BufferedInputStream对应
  LineNumberReader:与LineNumberInputStream对应
  PushBackReader:与PushbackInputStream对应
  BufferedWrite:与BufferedOutStream对应
  PrintWrite:与 PrintStream对应
  疯狂软件Java培训紧跟最新的Java潮流技术,国内首家讲解Java 8新特征,根据企业工作中需要的开发技术,让学员学习的课程是企业最需要的实用技术,而且也保障学员能把这些技能点学会、学好,并且疯狂软件教育的课程实时更新,在信息技术快速发展的情况下,可以保证学员学到更新更主流的技术。师资雄厚,教师均拥有8年以上的项目实践经验,疯狂软件Java课程是理论与实践相结合,这样保障了学员很好的掌握理论知识同时,也能根据理论的指导做好实际的工作。为了培养学生的实践能力,设置了很多项目实战课程,在这些课程中,学生可以体验真正的项目实战过程,从而更深刻地掌握知识。如需了解更多,请咨询QQ:抢座热线:020- 咨询QQ:可登陆疯狂软件教育官网查询。Writer:写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。
&&& &|---BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
&&&& |---OutputStreamWriter:是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
&&&&&& &|---FileWriter:用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。
&&& &|---PrintWriter:
&&&& |---CharArrayWriter:
&&&& |---StringWriter:
【】【】【】【】
ISBN编号:&8
出版时间:&2013-3
出版社:&中国人事出版社
定价:¥45 优惠价:¥45&&ISBN编号:&9
出版时间:&2013-4
出版社:&中国人事出版社
定价:¥45 优惠价:¥45&&
????????????
????????????
         Copyright ©
() All Rights Reserved

我要回帖

更多关于 outputstream 的文章

 

随机推荐