Java IO: InputStreamReader和OutputStreamWriter

转载自  Java IO: InputStreamReader和OutputStreamWriter

作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com)

本章节将简要介绍InputStreamReader和OutputStreamWriter。细心的读者可能会发现,在之前的文章中,IO中的类要么以Stream结尾,要么以Reader或者Writer结尾,那这两个同时以字节流和字符流的类名后缀结尾的类是什么用途呢?简单来说,这两个类把字节流转换成字符流,中间做了数据的转换,类似适配器模式的思想。

InputStreamReader

原文链接

InputStreamReader会包含一个InputStream,从而可以将该输入字节流转换成字符流,代码例子:

InputStream inputStream = new FileInputStream("c:\\data\\input.txt");Reader reader = new InputStreamReader(inputStream);int data = reader.read();while(data != -1){char theChar = (char) data;data = reader.read();}reader.close();

注意:为了清晰,代码忽略了一些必要的异常处理。想了解更多异常处理的信息,请参考Java IO异常处理。

read()方法返回一个包含了读取到的字符内容的int类型变量(译者注:0~65535)。代码如下:

int data = reader.read();

你可以把返回的int值转换成char变量,就像这样:

char aChar = (char) data; //译者注:这里不会造成数据丢失,因为返回的int类型变量data只有低16位有数据,高16位没有数据

如果方法返回-1,表明Reader中已经没有剩余可读取字符,此时可以关闭Reader。-1是一个int类型,不是byte或者char类型,这是不一样的。

InputStreamReader同样拥有其他可选的构造函数,能够让你指定将底层字节流解释成何种编码的字符流。例子如下:

InputStream inputStream = new FileInputStream("c:\\data\\input.txt");
Reader reader = new InputStreamReader(inputStream, "UTF-8");

注意构造函数的第二个参数,此时该InputStreamReader会将输入的字节流转换成UTF8字符流。

OutputStreamWriter

原文链接

OutputStreamWriter会包含一个OutputStream,从而可以将该输出字节流转换成字符流,代码如下:

OutputStream outputStream = new FileOutputStream("c:\\data\\output.txt");
Writer writer = new OutputStreamWriter(outputStream);
writer.write("Hello World");
writer.close();

OutputStreamWriter同样拥有将输出字节流转换成指定编码的字符流的构造函数。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java常用代码_Java 中常用代码 (欢迎补充)

//------------------------------------------------------------------------------------------------------生成四位随即验证码String str "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";StringBuilder s new StringBuilder();int len 4…

Intellij IDEA 重置所有工具栏 Intellij IDEA 中的 Debug 控制台输出窗口不见了的解决办法

Intellij IDEA 中的 Debug 控制台输出窗口不见了的解决办法 在 Debug 工具窗口,如图点击左侧重置布局图标,你的console窗口就还原了。

基于 .Net Core 的组件 Nuget 包制作 amp; 发布

微软的 ASP.Net Core 强化了 Nuget 的使用,所有的 .Net Core 组件均有 Nuget 管理,所以有必要探讨一下 .Net Core 组件制作 Nuget 包和发布。 之前 .Net Framework 程序集打包 Nuget 有以下方法: 1. 使用命令 nuget pack 详见博客园的一篇博…

#{} vs ${}

#{}: 是以预编译的形式,将参数设置到SQL语句中;PreparedStatement:防止SQL注入 ${}: 取出的值直接拼装在SQL语句中;会有安全问题 大多数情况下,我们去参数的值都应该使用#{}

Java IO: Reader和Writer

转载自 Java IO: Reader和Writer作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) Reader 原文链接 Reader是Java IO中所有Reader的基类。Reader与InputStream类似,不同点在于,Reader基于字符而非基于字节。换句话说,Reader用于读取…

idea新建module 后 mapper老是说mapper和xml没有绑定

20200225_005a 三层全部走通 上面走不出来应该是spingboot的版本太高了 选spring版本的时候选到最低版本 intian_talentapartment_api.zip repair

java线程的创建线程_多线程(Thread、线程创建、线程池)

第1章 多线程1.1 多线程介绍学习多线程之前,我们先要了解几个关于多线程有关的概念。进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有…

hibernate注解实体类(Emp.java)

Emp.java 员工信息表的注解实体类详情: package cn.bdqn.hibernate_Criteria.entity;import java.util.Date; import javax.persistence.*;/*** Emp entity. author MyEclipse Persistence Tools*/Entity Table(name"EMP") public class Emp implements j…

MySQL在EF Core下的Scaffolding操作

Pomelo于2016年11月22日发布的MySQL for ef core中,增加了DbContext Scaffolding的支持,这项功能是让开发者可以从现有的数据库中提取表、列、索引及外键成为模型。这也是当前唯一一个支持Scaffolding的MySQL for EF Core Provider。 下面将演示如何使用…

Java IO: 序列化与ObjectInputStream、ObjectOutputStream

转载自 Java IO: 序列化与ObjectInputStream、ObjectOutputStream作者:Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) 本小节会简要概括Java IO中的序列化以及涉及到的流,主要包括ObjectInputStream和ObjectOutputStream。 Serializabl…

调试备忘录-RS485 MODBUS RTU协议简述

目录--点击可快速直达 目录 写在前面先简单说下什么是MODBUS?参考文章 写在前面 最近在做和物联网有关的小项目,有一个传感器通讯用到了RS485 MODBUS RTU协议,所以就写个随笔记录下。 先简单说下什么是MODBUS? Modbus协议是应用于电子控…

狂神说spring笔记

B站 https://www.bilibili.com/video/BV1WE411d7Dv 狂神说Spring01:概述及IOC理论推导 https://mp.weixin.qq.com/s/VM6INdNB_hNfXCMq3UZgTQ 狂神说Spring02:快速上手Spring https://mp.weixin.qq.com/s/Sa39ulmHpNFJ9u48rwCG7A 狂神说Spring03&#…

体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图

这是从 ASP.NET Core 1.1 官方发布博文中学到的一招,可以在 dontet publish 时将 Razor 视图编译为 .dll 文件。 需要在 project.json 中添加如下配置: 1)在 "dependencies" 中添加: "Microsoft.AspNetCore.Mvc.Ra…

Vue组件异步加载

一、vue的非编译模式 基于requireJSVUE搭建的环境 (1)路由配置信息 A、异步加载组件 define(function(){return [{name: "my-component",path: "/myComponent",component: resolve > require([myComponent], resolve),}]; }); B、…

Java毕设动物管理系统_java毕业设计_springboot框架的现代化动物园管理系统EB

这是一个基于java的毕业设计项目,毕设课题为springboot框架的现代化动物园管理系统EB, 是一个采用b/s结构的javaweb项目, 开发工具eclipsei/eclipse, 项目框架jspspringbootmybatis, 现代化动物园管理系统EB采用mysql进行数据存储, 并基于mybatis进行了orm实体关系映射, 该现代…

关闭(杀死)8080端口

Microsoft Windows [版本 10.0.14393] (c) 2016 Microsoft Corporation。保留所有权利。 C:\windows\system32>netstat -ano | findstr 8080 TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 6148 C:\windows\system32>taskkill /pid 6148 /f 成功: 已终止 PID 为 6148 的进程。…

Mybatis(笔记)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sVjVvSsH-1609421261302)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201230155751713.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T7e…

Java IO: Buffered和Data

转载自 Java IO: Buffered和Data作者:Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) 本小节会简要概括Java IO中Buffered和data的输入输出流,主要涉及以下4个类型的流:BufferedInputStream,BufferedOutputStream…