您的位置:首页 > 其它

字符流和字节流常用类,及其之间的数据交换实现

2016-11-04 20:49 399 查看
字节输入流:

InputStream
(抽象类,字节输入流的所有类的超类)---读取原始字节流,
请考虑使用FileInputStream

(1) |__FileInputStream
描述:从文件系统中的某个文件中获得输入字节,用于读取
诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。

>FileInputStream(File file)
通过打开一个到实际文件的连接来创建一个 FileInputStream,
该文件通过文件系统中的 File 对象 file 指定。

>FileInputStream(FileDescriptor fdObj)
通过使用文件描述符 fdObj 创建一个 FileInputStream,
该文件描述符表示到文件系统中某个实际文件的现有连接。(不常用)

>FileInputStream(String name)
通过打开一个到实际文件的连接来创建一个 FileInputStream,
该文件通过文件系统中的路径名 name 指定。

(2) |__BufferedInputStream
描述:在输入流上添加一些功能,即缓冲输入以及支持 mark 和
reset 方法的能力。

>BufferedInputStream(InputStream in)
通过in来引入输入流

>BufferedInputStream(InputStream in, int size)
创建具有指定缓冲区大小的 BufferedInputStream
并保存其参数,即输入流 in,以便将来使用。(不写时默认8192)


↓
|-----------------------------------------------------------------|
字节流和字符流之间数据交换的桥梁:InputStreamReader(InputStream in)
|-----------------------------------------------------------------|
↑


字符输入流:

Reader(抽象类,用于读取字符流的抽象类)

(1) |__BufferedReader
描述:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

>BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。

>BufferedReader(Reader in, int sz)
创建一个使用指定大小输入缓冲区的缓冲字符输入流。

(2) |__InputStreamReader
描述:是字节流通向字符流的桥梁

>InputStreamReader(InputStream in)
创建一个使用默认字符集的 InputStreamReader。

>InputStreamReader(InputStream in, Charset cs)
创建使用给定字符集的 InputStreamReader。

>InputStreamReader(InputStream in, CharsetDecoder dec)
创建使用给定字符集解码器的 InputStreamReader。

>InputStreamReader(InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader。

(2)[1]|__FileReader
描述:用来读取字符文件的便捷类

>FileReader(File file)
在给定从中读取数据的 File 的情况下创建一个新 FileReader。

>FileReader(FileDescriptor fd)
在给定从中读取数据的 FileDescriptor 的情况下创建一个新FileReader。

>FileReader(String fileName)
在给定从中读取数据的文件名的情况下创建一个新 FileReader


[为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。]

例如:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));


读写道理同样,下面是一个将一个文件夹中的文件复制到另一个文件夹的函数

private static void copyfiles(File srcPath, File destPath) throws IOException {
File[] files = srcPath.listFiles();
for(File file: files){
BufferedInputStream fr =
new BufferedInputStream(new FileInputStream(file));

File dest =
new File(destPath,file.getName());

BufferedOutputStream fw =
new BufferedOutputStream(new FileOutputStream(dest));

byte[] b = new byte[1024];
int ch = -1;
while((ch = fr.read(b))!=-1){
fw.write(b,0,ch);
}
System.out.println(">>"+file.getName()+"---------复制成功!");
fr.close();
fw.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  字符流