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 ...
随机推荐
- CentOS 7 yum 安装 MySQL5.7
1.下载 MySQL 官方的 Yum Repository ,官网地址:https://dev.mysql.com/downloads/repo/yum/ 从 MySQL 官网选取合适的 MySQL ...
- 跟我一起读postgresql源码(十五)——Executor(查询执行模块之——control节点(上))
控制节点 控制节点用于完成一些特殊的流程执行方式.由于PostgreSQL为査询语句生成二叉树状的査询计划,其中大部分节点的执行过程需要两个以内的输入和一个输出.但有一些特殊的功能为了优化的需要,会含 ...
- [Nginx]单机环境的多应用配置
# 服务层 # https://github.com/farwish/alconservice # alconservice.conf server { listen 8090; root /home ...
- [DeeplearningAI笔记]ML strategy_2_2训练和开发/测试数据集不匹配问题
机器学习策略-不匹配的训练和开发/测试数据 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.4在不同分布上训练和测试数据 在深度学习时代,越来越多的团队使用和开发集/测试集不同分布的数据来 ...
- Spring MVC的DispatcherServlet
Spring MVC提供了一个名为org.springframework.web.servlet.DispatcherServlet的Selvet充当前端控制器,所有的请求驱动都围绕这个Dispatc ...
- jQuery源码逐行分析学习01(jQuery的框架结构简化)
最近在学习jQuery源码,在此,特别做一个分享,把所涉及的内容都记录下来,其中有不妥之处还望大家指出,我会及时改正.望各位大神不吝赐教!同时,这也是我的第一篇前端技术博客,对博客编写还不是很熟悉,美 ...
- pip install 提示"no previously-included directories found matching"及"no previously-included files matching found anywhere in distribution",且偶发无法关联安装 PyPI 库的故障
环境描述: Python 2.7.5 CentOS-7.2 报错现象: (1).在虚拟环境下运行 pip install 命令安装 PyPI 第三方库,出现类似如下告警. Running setu ...
- Asp.net core Razor 页面
创建asp.net core 空项目->MyWeb 修改Startup.cs启动文件添加Razor页面支持: public void ConfigureServices(IServiceColl ...
- qt中的udp编程
UDP QUdpSocket ---> upd socket 1.创建 QUdpSocket *p = new QUdpSocket(); 2.最先接收数据一方 调用bind-> ip/p ...
- Linux-安装FFmpeg
FFmpeg官网:http://www.ffmpeg.org 官网介绍 FFmpeg is the leading multimedia framework, able to decode, enco ...