java字符流和字节流转换_java中字符流和字节流的转换
看到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中字符流和字节流的转换相关推荐
- java中io流是类吗_Java中的IO流
今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...
- java 中的流_Java中的流(IO
Java中的流(IO流. java.io包中定义了多个流类型(类或抽象类)来实现 输入 / 输出功能,可以从不同的角度对其进行分类: 按单位可分为: 字节流 (一个字节一个字节的读取) ...
- java io 创建文件夹_Java中Io流操作-File类的常用操作-创建文件,创建文件夹
package com.hxzy.IOSer; import java.io.File; import java.io.IOException; public class Demo03 { publi ...
- java 的io流需要学吗_Java的IO流之字节流,必须要学得内容,你会嘛?
原标题:Java的IO流之字节流,必须要学得内容,你会嘛? 伙伴们~ 端午节过的如何呀~ 有没有很开心呀~ 假期已过咱们继续开动了 IO流 先来认识一下IO流: IO流用来处理设备之间的数据传输,Ja ...
- java体系的四大基类_Java中的io流学习(了解四大基类和基本步骤)
Java中io流四大基类及io流操作四大基本步骤 io流:(input/output)即输入输出流.面向对象的思想之一是面向接口编程,面向父类编程,也就是多态.所以学好基类(父类)很重要. 分类 按处 ...
- java io流区别_Java中IO流的分类和BIO,NIO,AIO的区别
到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...
- java字节字符_java中字符和字节的区别
byte(字节): byte即字节的意思,是java中的基本数据类型,用来申明字节型的变量,一个字节包含8个位,所以,byte类型的取值范围是-128到127. 通常在读取非文本文件时(如图片,声音, ...
- java中的进制输出转换_java中进制的转换,Byte与16进制的转换
java中对于进制的转换有很多方式,其中对于常见的基本的二进制 八进制 十进制 十六进制等的转换有对于的包装类实现,不需要通过二外的算法来进行实现,具体如下: 首先关于最简单的二进制转换的方法有: 十 ...
- java stringbuffer数组_Java中字符数组、String类、StringBuffer三者之间相互转换
一.StringBuffer与String的相互转换 1.将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型. StringB ...
最新文章
- 在redhat9上安装firefox
- docker可以把应用及其相关的_Docker相关命令应用
- c语言 int top,顺序栈(C语言,静态栈)
- STM32的I/O口的八种工作模式
- C++ class、struct区别
- idea数据库反向生成实体类_IntelliJ IDEA 的数据库管理工具实在太方便了
- js模板引擎 之handlebars.js
- 自己写的_top、_parent以及对iframe和frameset的理解
- 分享一下自己写的PHP函数
- PHP 微信网页授权开发
- Wannafly Winter Camp 2019 Day4 G 置置置换 (oeis/DP)
- pbs分解_谈WBS与PBS
- Linux制作U盘Windows启动盘,windows下制作linux U盘启动盘或者安装优盘(转)
- flutter 弹幕 yzl_flutter_bulletchat的使用
- 读懂西瓜书 14 : 概率图模型
- 什么是云中台系统_什么是云中的超融合?
- 2014中国民营企业500强在京津冀经济区、珠江三角洲、长江三角洲分布
- Echart 仪表盘 样式调整
- 蒲公英内侧:项目打包成ipa文件,创建证书和描述文件流程
- RuntimeError: Physical devices cannot be modified after being initialized