1. 由于Java采用16位的Unicode字符,因此需要基于字符的输入/输出操作。从Java1.1版开始,加入了专门处理字符流的抽象类Reader和Writer,前者用于处理输入,后者用于处理输出。

2. Java程序语言使用Unicode来表示字符串和字符,Unicode使用两个字节来表示一个字符,即一个字符占16位

3. 字节流的编码规范与具体的平台有关,可以在构造流对象时指定规范,也可以使用当前平台的缺省规范

InputStreamReader和OutputStreamWriter

1. InputStreamReader和OutputStreamWriter是java.io包中用于处理字符流的基本类,用来在字节流和字符流之间搭一座“桥”。

2. InputStreamReader的构造方法:

public InputSteamReader(InputSteam in)

public InputSteamReader(InputSteam in,String enc)

3. OutputStreamWriter的构造方法:

public OutputStreamWriter(OutputStream out)

public OutputStreamWriter(OutputStream out,String enc)

4. enc为指定的编码规范(若无此参数,表示使用当前平台的缺省规范,可用getEncoding()方法得到当前字符流所用的编码方式) 

5. 读写字符的方法read()、write(),关闭流的方法close()等与Reader和Writer类的同名方法用法都是类似的。

FileReader和FileWriter:

1. FileReader类创建了一个可以读取文件内容的Reader类。FileReader继承于InputStreamReader。它最常用的构造方法显示如下:

FileReader(String filePath)

FileReader(File fileObj)

每一个都能引发一个FileNotFoundException异常。这里,filePath是一个文件的完整路径,fileObj是描述该文件的File 对象

2. FileWriter 创建一个可以写文件的Writer类。 FileWriter继承于OutputStreamWriter.它最常用的构造方法如下:

FileWriter(String filePath)

FileWriter(String filePath, boolean append)

FileWriter(File fileObj)

append :如果为 true,则将字节写入文件末尾处,而不是写入文件开始处

3. FileWriter类的创建不依赖于文件存在与否。在创建文件之前,FileWriter将在创建对象时打开它来作为输出。如果你试图打开一个只读文件,将引发一个IOException异常

CharArrayReader和CharArrayWriter:

1. CharArrayReader 是一个把字符数组作为源的输入流的实现。该类有两个构造方法,每一个都需要一个字符数组提供数据源:

CharArrayReader(char array[ ])

CharArrayReader(char array[ ], int start,int numChars)

这里,array是输入源。第二个构造方法从你的字符数组的子集创建了一个Reader,该子集以start指定的索引开始,长度为numChars

2. CharArrayWriter 实现了以数组作为目标的输出流。CharArrayWriter 有两个构造方法:

CharArrayWriter( )

CharArrayWriter(int numChars)

第一种形式,创建了一个默认长度的缓冲区。第二种形式,缓冲区长度由numChars指定。缓冲区保存在CharArrayWriter的buf 成员中。缓冲区大小在需要的情况下可以自动增长。 缓冲区保持的字符数

包含在CharArrayWriter的count 成员中。buf 和count 都是受保护的域(protected)

BufferedReader和BufferedWriter:

1. BufferedReader 通过缓冲输入提高性能。它有两个构造方法:

BufferedReader(Reader inputStream)

BufferedReader(Reader inputStream, int bufSize)

第一种形式创建一个默认缓冲区长度的缓冲字符流。第二种形式,缓冲区长度由bufSize传入

2. 和字节流的情况相同,缓冲一个输入字符流同样提供支持可用缓冲区中流内反向移动的基础。为支持这点,BufferedReader 实现了mark()和reset()方法,并且BufferedReader.markSupported( ) 返回true

3. BufferedWriter是一个增加了flush( )方法的Writer。flush( )方法可以用来确保数据缓冲区确实被写到实际的输出流。用BufferedWriter可以通过减小数据被实际的写到输出流的次数而提高程序的性能。

4. BufferedWriter有两个构造方法:

BufferedWriter(Writer outputStream)

BufferedWriter(Writer outputStream, int bufSize)

第一种形式创建了使用默认大小缓冲区的缓冲流。第二种形式中,缓冲区大小是由bufSize参数传入的

PushbackReader:

1. PushbackReader类允许一个或多个字符被送回输入流。这使你可以对输入流进行预测。下面是它的两个构造方法:

PushbackReader(Reader inputStream)

PushbackReader(Reader inputStream,int bufSize)

第一种形式创建了一个允许单个字节被推回的缓冲流。第二种形式,推回缓冲区的大小由bufSize参数传入

2. PushbackReader 提供了unread( )方法。该方法返回一个或多个字符到调用的输入流。它有下面的三种形式:

void unread(int ch)

void unread(char buffer[ ])

void unread(char buffer[ ], int offset, int numChars)

第一种形式推回ch传入的字符。它是被并发调用的read( )返回的下一个字符。第二种形式返回buffer中的字符。第三种形式推回buffer中从offset开始的numChars个字符。如果在推回缓冲区

为满的条件下试图返回一个字符,一个IOException异常将被引发

ObjectOutputStream和ObjectInputStream:

1. ObjectOutput接口 : ObjectOutput 继承DataOutput接口并且支持对象序列化。特别注意writeObject( )方法,它被称为序列化一个对象。所有这些方法在出错情况下引发IOException 异常。

2. ObjectOutputStream类继承OutputStream 类和实现ObjectOutput 接口。它负责向流写入对象。该类的构造方法如下:

ObjectOutputStream(OutputStream outStream) throws IOException 参数outStream 是序列化的对象将要写入的输出流

3. ObjectInput 接口继承DataInput接口。它支持对象序列化。特别注意 readObject( )方法,它叫反序列化对象。所有这些方法在出错情况下引发IOException 异常

4. ObjectInputStream 继承InputStream 类并实现ObjectInput 接口。ObjectInputStream 负责从流中读取对象。该类的构造方法如下:

ObjectInputStream(InputStream inStream) throws IOException,StreamCorruptedException 参数inStream 是序列化对象将被读取的 输入流。

RandomAccessFile

1. RandomAccessFile包装了一个随机访问的文件,即可以作为输入流,也可以作为输出流。它不是派生于InputStream和OutputStream,

而是实现定义了基本输入/输出方法 的DataInput和DataOutput接口。它支持定位请求——也就是说,可以在文件内部放置文件指针。

它有两个构造方法:

RandomAccessFile(File fileObj, String access) throws FileNotFoundException

RandomAccessFile(String filename, String access) throws FileNotFoundException

第一种形式,fileObj指定了作为File 对象打开的文件的名称。第二种形式,文件名是由filename参数传入的。两种情况下,access 都决定

    允许访问何种文件类型。如果是“r”,那么文件可读不可写,如果是“rw”,文件以读写模式打开

2. RandomAccessFile类同时实现了DataInput和DataOutput接口,提供了对文件随机存取的功能,利用这个类可以在文件的任何位置读取或写入数据

3. 常用方法:

public long getFilePointer():回到此文件开头的偏移量(以字节为单位),在该位置发生下一个读取或写入操作

public void seek(long pos):设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。偏移量的设置可能会超

出文件末尾。偏移量的设置超出文件末尾不会改变文件的长度。 只有在偏移量的设置超出文件末尾的情况下

对文件进行写入才会更改其长度

public long length():返回此文件的长度

public int skipBytes(int n):尝试跳过输入的 n 个字节以丢弃跳过的字节

IO(字符流)的更多相关文章

  1. Java Io 字符流

    Java Io 字符流包含: 1. InputStreamReader  它是由byte流解析为char流,并且按照给定的编码解析. 2. OutputStreamWrite  它是char流到byt ...

  2. Java IO: 字符流的Buffered和Filter

    作者: Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍缓冲与过滤相关的reader和writer,主要涉及BufferedReader.B ...

  3. Java IO: 字符流的Piped和CharArray

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍管道与字符数组相关的reader和writer,主要涉及PipedReader.Pip ...

  4. java学习之IO字符流

    package com.io; import java.io.*; /** * 文件字符流的读取 * @author ganhang * */ public class FileReaderDemo ...

  5. Java学习笔记29(IO字符流,转换流)

    字符流:只能操作文本文件,与字节流的区别是,字节流是按照字节来读取文件,而字符流是按照字符来读取,因此字符流的局限性为文本文件 字符输出流:Write类,使用时通过子类   每一次写入都要刷新 pac ...

  6. java IO字符流

    字节流:因为内存中数据都是字节,二进制数据. 字符流:方便处理文本数据.字符流是基于字节流的. ascii 编码表,并且各国都有自己的编码表. unicode码表,世界码表.优化后 utf-8码表. ...

  7. File类与常用IO流第五章——IO字符流

    字符流,只能操作文本文件,不能操作图片.视频等非文本文件 字符输入流 java.io.Reader 字符输入流中一些共性的成员方法 int read():读取单个字符并返回. int read(cha ...

  8. java -io字符流FileWrite操作演示

    FileWriter字符输出流演示: /* * FiileWriter 字符流的操作 * FileWriter 的构造方法 可传递 File类型 还可以传递String类型 * * 方法 : * wr ...

  9. Java文件与io——字符流

    Writer写入字符流的抽象类.对文件的操作使用:FileWriter类完成 Reader读取字符的抽象类. public class CharDemo { /** * @param args */ ...

随机推荐

  1. Docker学习计划三:Dockerfile 使用

    我们使用 Dockerfile 定义镜像,依赖镜像来运行容器,因此 Dockerfile 是镜像和容器的关键,Dockerfile 可以非常容易的定义镜像内容 首先通过一张图来了解 Docker 镜像 ...

  2. java的HashMap 原理

    https://www.cnblogs.com/chengxiao/p/6059914.html 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比 ...

  3. JAVAORM框架之Mybatis (Ibatis) 详解

    目录 Mybatis基础概念 Mybatis开放方式演进 Mybatis框架核心要点 关联查询 延迟加载(懒加载) 动态SQL Mybatis缓存 Mybatis逆向工程 PageHelper分页插件 ...

  4. Equinox P2 介绍(一)Getting Start

    一直觉得 Equinox 的 P2 是个神秘的东西,常常使得 Eclipse 或 Equinox 表现出一些奇怪的行为,于是找来官方文档读一读,试图更好地理解与应用 Equinox . 官方文档很多, ...

  5. 《into100-创客+沙龙第4期:互联网产品用户需求挖掘与转化》圆满成功

    5月16日,由麦思博和阿里云联合主办的<into100-创客+沙龙第4期:互联网产品用户需求挖掘与转化>圆满结束.现场100多位来自互联网及软件公司的产品经理.产品总监.开发经理.工程师及 ...

  6. Python3.6.3中,functools似乎不能用

    用pip install安装时报编码错误: return s.decode(sys.__stdout__.encoding) UnicodeDecodeError: 'utf-8' codec can ...

  7. Java编程思想中关于闭包的一个例子

    Java编程思想中的一个例子,不是很理解使用闭包的必要性,如果不使用闭包,是不是有些任务就不能完成?继续探索. package InnerClass; interface Incrementable ...

  8. HDU 4578 - Transformation - [加强版线段树]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578 Problem Description Yuanfang is puzzled with the ...

  9. QtCore是Qt的精髓(包括五大模块:元对象系统,属性系统,对象模型,对象树,信号槽)

    作者:小豆君的干货铺链接:https://www.zhihu.com/question/27040542/answer/218384474来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  10. linux环境下python的部署

    linux系统环境自带python2.6,但有时我们项目使用的版本可能是3.x以上等等,此时我们需要在linux中再安装项目所需的python版本,此时就涉及多版本共存问题了,很多同学在安装多个版本P ...