java字符流
网上有很多地方说inputStreamReader和outStreamWriter、BufferedReader和BufferedWriter都是字符流。不过也有地方说inputStreamReader和outStreamWriter只是转换流,实现字节流到字符流的转换。
而在我看来,两种说法都有道理,如果一定要分个高下的话,那就更加趋向于认同前一种。
因为只要和FileInputStream做一个简单的比较就可以知道inputSteamReader是按字符读取的,而FileInputStream是按字节。
测试部分代码如下:
1、
File file = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest1.txt");
// 创建一个fileInputStream对象
FileInputStream fileInputStream = new FileInputStream(file);
// 获取文件中字符的长度
int leng = fileInputStream.available();
for (int i = 0; i < leng; i++) {
// 读取每个字节
System.out.print(fileInputStream.read());
System.out.println();
}
2、
File file = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest1.txt")
// 创建字符输入流的同时指定字符集
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
while (isr.ready()) {
System.out.print(isr.read());
System.out.println();
}
在上边的例子中可以看到,对于同一个文件,FileInputStream的输出行数要比 InputStreamReader的输出行数多出两倍多(中英文混合),InputStreamReader的输出行数刚好就是文件中的字符个数。
不过,说inputStreamReader和outStreamWriter是转换流,也不是没有道理,因为通常使用的时候都是结合BufferedReader和BufferedWriter来一起使用的,inputStreamReader和outStreamWriter创建的时候可以声明字符集。
简单的示例如下:
/**
* inputStreamReader和outStreamWriter字符输入输出流
*
* @author:tuzongxun
* @Title: inAndOutTest
* @param @throws IOException
* @return void
* @date Jul 20, 2016 11:17:05 AM
* @throws
*/
public static void readAndWriterTest1() throws IOException {
File file = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest1.txt");
File file1 = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest2.txt");
// 创建字符输入流的同时指定字符集
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file1), "utf-8");
while (isr.ready()) {
int in = isr.read();
osw.write(in);
}
osw.flush();
isr.close();
osw.close();
}
/**
* BufferedReader和BufferedWriter 字符缓冲输入和输出流
*
* @author:tuzongxun
* @Title: readAndWriterTest2
* @param @throws IOException
* @return void
* @date Jul 21, 2016 10:36:28 AM
* @throws
*/
public static void readAndWriterTest2() throws IOException {
File file = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest1.txt");
File file1 = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest2.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8")));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file1), "utf-8")));
String str;
while ((str = br.readLine()) != null) {
System.out.println(str);
bw.write(str);
}
bw.flush();
br.close();
bw.close();
}
java字符流的更多相关文章
- Java 字符流实现文件读写操作(FileReader-FileWriter)
Java 字符流实现文件读写操作(FileReader-FileWriter) 备注:字符流效率高,但是没有字节流底层 字节流地址:http://pengyan5945.iteye.com/blog/ ...
- java字符流操作flush()方法及其注意事项
java字符流操作flush()方法及其注意事项 flush()方法介绍 查阅文档可以发现,IO流中每一个类都实现了Closeable接口,它们进行资源操作之后都需要执行close()方法将流关闭 ...
- [Java] 字符流 Writer,输出字符数据PrintWriter
package test.stream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...
- [Java] 字符流Reader,读取字符数据
package test.stream; import java.io.BufferedReader; import java.io.FileNotFoundException; import jav ...
- Java字符流和字节流对文件操作
记得当初自己刚开始学习Java的时候,对Java的IO流这一块特别不明白,所以写了这篇随笔希望能对刚开始学习Java的人有所帮助,也方便以后自己查询.Java的IO流分为字符流(Reader,Writ ...
- Java 字符流操作
上篇文章Java 字节流操作介绍了java中基本的字节流操作,但是我们常常对于字符操作,如果使用字节流来实现输入输出就显得麻烦,我们可以使用字符流来实现对我们看得见的字符char进行操作,主要内容如下 ...
- Java 字符流文件读写
上篇文章,我们介绍了 Java 的文件字节流框架中的相关内容,而我们本篇文章将着重于文件字符流的相关内容. 首先需要明确一点的是,字节流处理文件的时候是基于字节的,而字符流处理文件则是基于一个个字符为 ...
- Java 字符流与基本IO
字符流基类 java.io包中专门用于字符流处理的类,是以 Reader 和 Writer 为基础派生的一系列类.字符流以字符为单位,根据码表映射字符,一次可能读多个字节,只能处理字符类型的数据.Re ...
- java字符流实现文件间的内容复制
package com.io.demo1; import java.io.FileReader; import java.io.FileWriter; public class TestFileSTr ...
- java 字符流 字节流
java对文本文档进行操作(拷贝.显示)出现乱码一般来说,可以从两个方面入手. 1.文本文件本身的编码格式. 2.java代码中处理文本文件的编码格式. 这里要注意的一点是,我们可以看出copyFil ...
随机推荐
- ftp服务配置
文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件.上传文件.下载文件. FTP 基于TCP协议生成一个虚拟的连接,主要用于控制F ...
- printf,sprintf,fprintf的比较
1 printf,是把格式字符串输出到标准输出(一般是屏幕,可以重定向).2 sprintf,是把格式字符串输出到指定字符串中,所以参数比printf多一个char*.那就是目标字符串地址.3 fpr ...
- 关于异步IO与同步IO的写操作区别
最近这两天都在看IO相关的知识点.一开始太凌乱,太杂,不过终于整理清楚了.觉得杂乱是因为一开始以为异步IO等于非阻塞IO,这完全是两个概念, LINUX下的异步IO有两类,一类为glibc AIO,这 ...
- require和require_once的区别
require 的使用方法如 require("./inc.php"); .通常放在 PHP 程式的最前面,PHP 程式在执行前,就会先读入 require 所指定引入的档案,使它 ...
- [Python Study Notes]实现对鼠标控制
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- 【Tools】Pycharm2017 windows安装与修改中文界面教程
[windows] 1.到官网下载Pycharm最新版 https://www.jetbrains.com/pycharm/download/#section=windows 2.安装激活 Pycha ...
- NSIS 设置系统变量
定义 ; include for some of the windows messages defines !include "winmessages.nsh" ; HKLM (a ...
- zabbix安装步骤
第一步:安装环境 Zabbix要求的环境 组件 版本要求 Apache版本 1 .3.1 2 MySQL版本 5.0.3 PHP版本 5.4.0 本次安装的环境 组件 版本要求 操作系统 CentOS ...
- XAMPP的配置与使用
XAMPP的配置与使用 一.起因 一开始,我在本地手动DIY安装了WAMPP环境,其中经历了很长时间的折腾,原因是独立安装Apache和MySQL,以及PHP的时候,屡次遇到版本兼容问题,我主要的时间 ...
- bzoj[1835][ZJOI2010]base 基地选址
bzoj[1835][ZJOI2010]base 基地选址 标签: 线段树 DP 题目链接 题解 这个暴力DP的话应该很容易看出来. dp[i][j]表示造了i个通讯站,并且j是第i个的最小费用. \ ...