Java 输入与输出(I/O)之字节流、字符流与转换流

Java 输入/输出流(Input/Output,简称I/O)是Java语言用于读写数据的API,它提供了一系列类和接口,用于读取和写入各种类型的数据信息。

  • I/O流按数据单元(粒度大小)可分为字节流(以字节为处理单元)和字符流(以字符为处理单元)。
    在这里插入图片描述

  • I/O流按数据流向分可分为输入流(只能从中读取数据,不能向其写入数据)和输出流(只能向其写入数据,不能从中读取数据)。输入流使用InpurtStream和Reader作为基类;输出流使用OutputStream和Writer作为基类。

在这里插入图片描述

转换流

在字节流和字符流之间可用转换流进行转换。
字节流更通用,但当处理文本数据时字节流比较繁琐;使用字符流操作文本数据则更便捷一些。因此,由于使用场景不同有时候就需要转换流来进行转换。

Java中类库中有两个转换流:输入转换流InputStreamReader和输出转换流OutputStreamWriter。

java.io.InputStreamReader  //输入转换流
java.io.OutputStreamWriter  //输出转换流

它们都是把字节流转换为字符流,当需要处理文本信息的场景可简化操作流程。

这两个转换流各有四个构造器,下面列出的是InputStreamReader的,OutputStreamWriter也类似。

public InputStreamReader(InputStream in) {}
 
public InputStreamReader(InputStream in, String charsetName) throws UnsupportedEncodingException {}
 
public InputStreamReader(InputStream in, Charset cs) {}
 
public InputStreamReader(InputStream in, CharsetDecoder dec) {}

下面我们来看一个转换流的演示例程,例程中方法writerFile(String path)的源码:

	/***把文本信息保存到文件***/
	public static void writerFile(String path) {
		try(FileOutputStream out = new FileOutputStream(path);
			Writer wOut = new OutputStreamWriter(out,Charset.defaultCharset())) {
				for (String string : poem) {
					wOut.write(string); //写到文件
				}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

其中,这行代码进行转换流处理(这里可省略分号;):

Writer wOut = new OutputStreamWriter(out,Charset.defaultCharset())

下面是完整的源程序。先把信息写入文件中,再通过方法read(String path)把文件信息读入,然后再打印到屏幕上。

package IOStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.Charset;
public class ChangeIOStream {
	static String poem[] = { "《凉州词》王翰",
			"葡萄美酒夜光杯,","欲饮琵琶马上催。",
			"醉卧沙场君莫笑,","古来征战几人回。"};
	
	/***把文本信息保存到文件***/
	public static void writerFile(String path) {
		try(FileOutputStream out = new FileOutputStream(path);
			Writer wOut = new OutputStreamWriter(out,Charset.defaultCharset())) {
				for (String string : poem) {
					wOut.write(string); //写到文件
				}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void read(String path) {
		char[] cs = new char[1024];
		int len = -1;
		try(FileInputStream in = new FileInputStream(path);
			Reader reader = new InputStreamReader(in,Charset.defaultCharset())) {
			while((len=reader.read(cs))!=-1) {
				System.out.println(new String(cs,0,len));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		String path = "D:/temp/ChangeTest.txt";
		ChangeIOStream.writerFile(path);
		ChangeIOStream.read(path);
	}
}

例程测试结果图:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么样的JSON编辑器才好用

简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也便于机器解析和生成。随着互联网和应用程序的快速发展,JSON已经成为数据传输和存储的主要格式之一。在处理和编辑JSON数据…

太速科技-212-RCP-601 CPCI刀片计算机

RCP-601 CPCI刀片计算机 一、产品简介 RCP-601是一款基于Intel i7双核四线程的高性能CPCI刀片式计算机,同时,将CPCI产品的欧卡结构及其可靠性、可维护性、可管理性与计算机的抗振动、抗冲击、抗宽温环境急剧变化等恶劣环境特性进行融合。产品特别…

unity开发之可视化制作动画

录制动画 1)打开录制动画页面(或者按快捷键ctrl6) 2)选中需要录制动画的对象 3)创建动画列表,注意现在还没有录制动画,我这里创建了开门和关门动画列表 4)选择需要录制动画的对象的相…

python爬虫实战案例——抓取B站视频,不同清晰度抓取,实现音视频合并,超详细!(内含完整代码)

文章目录 1、任务目标2、网页分析3、代码编写 1、任务目标 目标网站:B站视频(https://www.bilibili.com/video/BV1se41117WP/?vd_sourcee8e376ccbc5aa4cfd88e6a7917adfd1a),用于本文测验 要求:抓取该网址下的视频&…

大数据-190 Elasticsearch - ELK 日志分析实战 - 配置启动 Filebeat Logstash

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

uniapp:上拉加载更多、下拉刷新、页面滚动到指定位置

提醒 本文实例是使用uniapp进行开发演示的。 一、需求场景 在开发商品(SKU)列表页面时,通常有三个需求: 页面下拉刷新,第一页展示最新数据;上拉加载更多数据;列表页面可以滚动到指定位置&#x…

如何为工业未来赋能?通过CodeMeter为工业企业开辟工业自动化安全与灵活性之道

在现代工业自动化领域,数字化转型已经成为不可逆的趋势。然而,要将新一代的自动化软件与传统设备集成,企业面临的不仅是技术上的复杂性,更是如何有效保护宝贵的知识产权并实现灵活管理的严峻挑战。菲尼克斯电气(Phoeni…

HTML5教程(一)- 网页与开发工具

1. 什么是网页 网页 基于浏览器阅读的应用程序,是数据(文本、图像、视频、声音、链接等)展示的载体常见的是以 .html 或 .htm 结尾的文件 网站 使用 HTML 等制作的用于展示特定内容相关的网页集合。 2. 网页的组成 浏览器 代替用户向服务…

【云原生】Kubernets1.29部署StorageClass-NFS作为存储类,动态创建pvc(已存在NFS服务端)

文章目录 在写redis集群搭建的时候,有提到过使用nfs做storageclass,那时候kubernetes是1.20版本,https://dongweizhen.blog.csdn.net/article/details/130651727 现在使用的是kubernetes 1.29版本,根据之前的修改方式并未生效,反而提示:Error: invalid argument "Re…

C语言 动态数据结构的C语言实现单向链表-2

建立一个单向链表 在单向链表中查找节点---查找尾节点 在单向链表中查找节点 --- 查找第 n 个节点 向单向链表中插入一个节点 向单向链表的尾部插入一个节点 向单向链表中某节点后插入一个节点 向单向链表中插入一个节点 删除单向链表中的某一节点 链表 vs 数组 动态数据结构

C++核心编程和桌面应用开发 第十五天(deque/stack/queue)

目录 1.deque容器 1.1构造和赋值(同vector类似) 1.2大小操作 1.3插入和删除 1.5数据存取 1.6排序(升序) 2.stack容器 3.queue容器 1.deque容器 1.1构造和赋值(同vector类似) deque内部工作原理&a…

湖北省自闭症全托管:为您推荐湖北省的自闭症服务机构

原文指路:http://www.zibizhengwang.com/page35.html 自闭症,这一复杂而神秘的神经发育障碍,长久以来困扰着无数家庭。它不仅影响着儿童的社交互动、沟通能力,还常常伴随着行为问题和感官过敏。面对这一挑战,湖北省内…

HTML静态网页作业成品(HTML+CSS)——动漫犬夜叉主题网页设计制作(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码1、HTML代码2、CSS部分代码 五、源码获取 一、作品介绍 🏷️本套采用DIVCSS布局,未使用Javacsript代码,共有1个页面。 二…

使用Python来下一场深夜雪

效果图:(真实情况是动态的) 完整代码: import turtle import random# 初始化画布 turtle.bgcolor("#001f3f") # 偏深蓝色的背景 turtle.title("下雪的画面") turtle.speed(0) turtle.hideturtle() turtle.t…

ffmpeg视频滤镜:定向模糊-dblur

滤镜简述 dblur 官网链接 > https://ffmpeg.org/ffmpeg-filters.html#dblur 有一个模糊滤镜&#xff0c;我试了一下&#xff0c;没有感觉到它的特殊之处, 这里简单介绍一下。 滤镜使用 滤镜的参数 angle <float> ..FV.....T. set angle (from 0 t…

基于neo4j的旅游知识图谱维护与问答系统

你还在为毕业设计发愁吗&#xff1f;试试这个基于Neo4j的旅游知识图谱维护与问答系统吧&#xff01;这套系统不仅功能强大&#xff0c;而且几乎涵盖了你需要的一切&#xff0c;完美助力你的毕业项目&#xff01; 系统介绍 该系统是专门针对旅游景点信息的知识图谱工具&#x…

ClickHouse在百度MEG数据中台的落地和优化

导读 百度MEG上一代大数据产品存在平台分散、质量不均和易用性差等问题&#xff0c;导致开发效率低下、学习成本高&#xff0c;业务需求响应迟缓。为了解决这些问题&#xff0c;百度MEG内部开发了图灵3.0生态系统&#xff0c;包括Turing Data Engine(TDE)计算引擎、Turing Dat…

常用排序算法总结

内容目录 1. 选择类排序 1.1 直接选择排序1.2 堆排序 2. 交换类排序 2.1 冒泡排序2.2 快速排序 3. 插入类排序 3.1 直接插入排序3.2 希尔排序 4. 其它排序 4.1 归并排序4.2 基数排序/桶排序 排序 1. 选择类排序 选择类排序的特征是每次从待排序集合中选择出一个最大值或者最…

大数据治理平台建设规划方案(71页WORD)

随着信息化时代的到来&#xff0c;大数据已成为企业管理和决策的重要基础。然而&#xff0c;大数据的快速增长和复杂性给数据的管理和治理带来了巨大挑战。为了有效应对这些挑战&#xff0c;构建一个高效、稳定的大数据治理平台显得尤为重要。 文档介绍&#xff1a; 该平台旨在…

零基础Java第十期:类和对象(一)

目录 一、拜访对象村 1.1. 什么是面向对象 1.2. 面向对象与面向过程 二、类定义和使用 2.1. 类的定义格式 2.2. 类的定义练习 三、类的实例化 3.1. 什么是实例化 3.2. 类和对象的说明 四、this引用 4.1. 什么是this引用 4.2. this引用的特性 一、拜访对象村 在…