看到InputStreamReader和OutputStreamWriter的一些说法,

说InputStreamReader是将字节流转换成字符流,而OutputStreamWriter则相反,是将字符流转换成字节流;

但是

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(“xxxx”)));

这句代码中,明显OutputStreamWriter接收的是一个字节流,而返回的则是个字符流,

所以上面的说法应该是错误的吧?

额…这个…

OutputStreamWriter的构造方法传入参数是一个OutputStream字节流,也就是把OutputStream转换成OutputStreamWriter,从这个角度看是“字节流转换成字符流”。

OutputStreamWriter在write的时候,你传入了字符,但是最终IO写出的是字节流,这个角度看来是“字符流转换成字节流”。

所以两种说法都对。

“字节流转换成字符流”是指API的转换,“字符流转换成字节流”是指在write的时候数据的转换。

实际上你只要知道,计算机本身只支持01010101这样的二进制字节,而字符或字符串都是字节编码得到的,OutputStreamWriter只是多了一步编码操作而已。

构造 OutputStreamWriter 的是一个 FileOutputStream,这个 stream 其实是被封装在 writer 中,向 writer 进行的所有写操作最终都会写入 stream 中。但是向 writer 进行写操作的时候,写入的是字符串,而 writer 会将传入的字符串转换为字符流写入 stream 中……所以呢……

/**

* String字符串转换成InputStream流

* @param str String字符串

* @param encoding 编码格式

* @return InputStream流

*/

public static InputStream string2InputStream(String str, String encoding) {

ByteArrayInputStream result = null;

try {

if(str != null){

result = new ByteArrayInputStream(str.getBytes(encoding));

}

} catch (Exception e) {

result = null;

}

return result;

}

/**

* InputStream流转换成String字符串

* @param inStream InputStream流

* @param encoding 编码格式

* @return String字符串

*/

public static String inputStream2String(InputStream inStream, String encoding){

String result = null;

try {

if(inStream != null){

ByteArrayOutputStream outStream = new ByteArrayOutputStream();

byte[] tempBytes = new byte[_buffer_size];

int count = -1;

while((count = inStream.read(tempBytes, 0, _buffer_size)) != -1){

outStream.write(tempBytes, 0, count);

}

tempBytes = null;

outStream.flush();

result = new String(outStream.toByteArray(), encoding);

}

} catch (Exception e) {

result = null;

}

return result;

}

java字符流和字节流转换_java中字符流和字节流的转换相关推荐

  1. java中io流是类吗_Java中的IO流

    今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...

  2. java 中的流_Java中的流(IO

    Java中的流(IO流. java.io包中定义了多个流类型(类或抽象类)来实现 输入 / 输出功能,可以从不同的角度对其进行分类: 按单位可分为: 字节流         (一个字节一个字节的读取) ...

  3. java io 创建文件夹_Java中Io流操作-File类的常用操作-创建文件,创建文件夹

    package com.hxzy.IOSer; import java.io.File; import java.io.IOException; public class Demo03 { publi ...

  4. java 的io流需要学吗_Java的IO流之字节流,必须要学得内容,你会嘛?

    原标题:Java的IO流之字节流,必须要学得内容,你会嘛? 伙伴们~ 端午节过的如何呀~ 有没有很开心呀~ 假期已过咱们继续开动了 IO流 先来认识一下IO流: IO流用来处理设备之间的数据传输,Ja ...

  5. java体系的四大基类_Java中的io流学习(了解四大基类和基本步骤)

    Java中io流四大基类及io流操作四大基本步骤 io流:(input/output)即输入输出流.面向对象的思想之一是面向接口编程,面向父类编程,也就是多态.所以学好基类(父类)很重要. 分类 按处 ...

  6. java io流区别_Java中IO流的分类和BIO,NIO,AIO的区别

    到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...

  7. java字节字符_java中字符和字节的区别

    byte(字节): byte即字节的意思,是java中的基本数据类型,用来申明字节型的变量,一个字节包含8个位,所以,byte类型的取值范围是-128到127. 通常在读取非文本文件时(如图片,声音, ...

  8. java中的进制输出转换_java中进制的转换,Byte与16进制的转换

    java中对于进制的转换有很多方式,其中对于常见的基本的二进制 八进制 十进制 十六进制等的转换有对于的包装类实现,不需要通过二外的算法来进行实现,具体如下: 首先关于最简单的二进制转换的方法有: 十 ...

  9. java stringbuffer数组_Java中字符数组、String类、StringBuffer三者之间相互转换

    一.StringBuffer与String的相互转换 1.将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型. StringB ...

最新文章

  1. 在redhat9上安装firefox
  2. docker可以把应用及其相关的_Docker相关命令应用
  3. c语言 int top,顺序栈(C语言,静态栈)
  4. STM32的I/O口的八种工作模式
  5. C++ class、struct区别
  6. idea数据库反向生成实体类_IntelliJ IDEA 的数据库管理工具实在太方便了
  7. js模板引擎 之handlebars.js
  8. 自己写的_top、_parent以及对iframe和frameset的理解
  9. 分享一下自己写的PHP函数
  10. PHP 微信网页授权开发
  11. Wannafly Winter Camp 2019 Day4 G 置置置换 (oeis/DP)
  12. pbs分解_谈WBS与PBS
  13. Linux制作U盘Windows启动盘,windows下制作linux U盘启动盘或者安装优盘(转)
  14. flutter 弹幕 yzl_flutter_bulletchat的使用
  15. 读懂西瓜书 14 : 概率图模型
  16. 什么是云中台系统_什么是云中的超融合?
  17. 2014中国民营企业500强在京津冀经济区、珠江三角洲、长江三角洲分布
  18. Echart 仪表盘 样式调整
  19. 蒲公英内侧:项目打包成ipa文件,创建证书和描述文件流程
  20. RuntimeError: Physical devices cannot be modified after being initialized

热门文章

  1. linux命令解压tar命令,菜鸟学Linux命令:tar命令 压缩与解压缩
  2. 软件测试学习——第四天
  3. 【计算机网络】题目汇总
  4. 计算机在线考试系统,高效刷题考试平台!
  5. YOLOv5手把手教你制作VOC格式数据集与模型训练
  6. 获得抖音商品详情 API 返回值说明
  7. linux之常用软件
  8. Android webview加载html代码 上下左右有白边问题
  9. 判定有向无环图 (拓扑排序)
  10. 【2023浙江省部分中学招生】信息学三等奖及以上即可报名这些学校... ...