首页 > 其他分享 >六,转换流

六,转换流

时间:2024-10-21 20:22:41浏览次数:1  
标签:字符 转换 InputStreamReader new OutputStreamWriter 数据

Java转换流详解

在Java中,转换流(也称为字符流)是用于处理字符数据的流。转换流主要用于处理文本数据,它在处理过程中会涉及到字符编码和解码。转换流是Java I/O流中的一个重要组成部分,它允许程序以字符的形式读写数据,而不是字节的形式。

转换流概述

转换流主要分为两类:

  • 字符输出流:用于将字符数据转换为字节数据并写入到输出流中。
  • 字符输入流:用于从输入流中读取字节数据并将其转换为字符数据。

字符输出流

OutputStreamWriter

OutputStreamWriter是字符输出流,它可以将字符数据转换为字节数据,并写入到字节输出流中。

构造方法

// 使用OutputStream构造OutputStreamWriter
OutputStream os = new FileOutputStream("output.txt");
OutputStreamWriter osw = new OutputStreamWriter(os);

// 使用OutputStream和字符编码构造OutputStreamWriter
OutputStreamWriter osw = new OutputStreamWriter(os, StandardCharsets.UTF_8);

写数据方法

try {
    osw.write("Hello, World!"); // 写入字符串
    osw.write(72); // 写入单个字符,ASCII值为72的字符
    osw.write(new char[]{'H', 'e', 'l', 'l', 'l', 'o'}); // 写入字符数组
    osw.flush(); // 清空缓冲区,确保所有数据都被写出
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        osw.close(); // 关闭流
    } catch (IOException e) {
        e.printStackTrace();
    }
}

字符输入流

InputStreamReader

InputStreamReader是字符输入流,它可以从字节输入流中读取字节数据,并将其转换为字符数据。

构造方法

// 使用InputStream构造InputStreamReader
InputStream is = new FileInputStream("input.txt");
InputStreamReader isr = new InputStreamReader(is);

// 使用InputStream和字符编码构造InputStreamReader
InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);

读数据方法

try {
    char[] buffer = new char[1024];
    int readChars;
    while ((readChars = isr.read(buffer)) != -1) {
        String content = new String(buffer, 0, readChars);
        System.out.println(content);
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        isr.close(); // 关闭流
    } catch (IOException e) {
        e.printStackTrace();
    }
}

转换流的简化写法

为了方便使用,Java提供了FileReaderFileWriter这两个简化的类,它们是InputStreamReaderOutputStreamWriter的子类,专门用于文件的读写。

FileReader和FileWriter

// 使用FileReader读取文件
try (FileReader fr = new FileReader("input.txt")) {
    char[] buffer = new char[1024];
    int readChars;
    while ((readChars = fr.read(buffer)) != -1) {
        String content = new String(buffer, 0, readChars);
        System.out.println(content);
    }
} catch (IOException e) {
    e.printStackTrace();
}

// 使用FileWriter写入文件
try (FileWriter fw = new FileWriter("output.txt")) {
    fw.write("Hello, World!");
} catch (IOException e) {
    e.printStackTrace();
}

注意事项

  • 字符编码:在读写字符数据时,需要指定字符编码,否则可能会发生字符编码错误。
  • 缓冲区:转换流内部通常有缓冲区,使用flush()方法可以清空缓冲区,确保所有数据都被写出。
  • 关闭流:使用完流后,应该关闭流以释放资源。可以使用try-with-resources语句自动关闭流。

结论

转换流是Java中处理字符数据的重要工具,它允许程序以字符的形式读写数据。通过OutputStreamWriterInputStreamReader,我们可以轻松地将字节流转换为字符流,或者反之。此外,FileReaderFileWriter提供了一种简化的方式来读写文件中的字符数据。在实际编程中,合理使用转换流可以大大提高程序处理文本数据的能力。通过上述示例和解释,你应该能够更好地理解和应用转换流。

标签:字符,转换,InputStreamReader,new,OutputStreamWriter,数据
From: https://www.cnblogs.com/bjynjj/p/18490284

相关文章

  • YOLOv8性能提升:基于SPD-Conv的高效空间深度转换卷积技术解析【YOLOv8】
    本专栏专为AI视觉领域的爱好者和从业者打造。涵盖分类、检测、分割、追踪等多项技术,带你从入门到精通!后续更有实战项目,助你轻松应对面试挑战!立即订阅,开启你的YOLOv8之旅!专栏订阅地址:https://blog.csdn.net/mrdeam/category_12804295.html文章目录YOLOv8性能提升:基于SPD......
  • Meta 最新 SPIRIT-LM:语音文本无缝转换还能懂情绪;字节回应实习生破坏大模型训练:网传损
        开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表......
  • 把对象转换为json,在postman传递请求
    publicstaticvoidmain(String[]args){PackSaveTimeReqpackSaveTimeReq=newPackSaveTimeReq();packSaveTimeReq.setType(ThirdPartyOperationTypeEnum.WORK_START);packSaveTimeReq.setOperationTime(LocalDateTime.now());p......
  • python 实现RGB和HSV相互转换算法
    RGB和HSV相互转换算法介绍RGB和HSV之间的相互转换算法可以通过一系列的数学计算来实现。以下是对这两种色彩空间之间转换的基本算法的概述:RGB到HSV的转换1、归一化RGB值:首先,将RGB值从范围[0,255]归一化到[0,1]。这可以通过将每个颜色分量除以255来实现。2、计算明度V......
  • 视频信号转换芯片分类
    视频信号转换的芯片,包括MIPIDSI、LVDS、HDMI、eDP、Type-C、TTL/RGB、CSI和VGA等。这些芯片广泛应用于显示器、摄像头、嵌入式系统和消费电子设备中。以下是对这些芯片的简要分类和解释:MIPIDSI转换芯片TC358775XBG:MIPIDSI转双路LVDS,支持1920x1200分辨率。TC3......
  • 三,Java编程基础:深入理解数据类型与类型转换
    数据类型与类型转换在Java编程中,数据类型是定义变量存储数据的格式。Java是一种强类型语言,这意味着每个变量和表达式都有一个明确的数据类型。本文将深入探讨Java中的基本数据类型、引用数据类型以及类型转换,包括详细的示例和代码。基本数据类型Java的基本数据类型分为整数类型......
  • 代码随想录算法训练营day20| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树
    学习资料:https://programmercarl.com/0669.修剪二叉搜索树.html#算法公开课学习记录:669.修剪二叉搜索树(直接在原函数上操作,要根据情况用root的左右子树递归,因为子树中有满足条件的;前序:根左右)点击查看代码#Definitionforabinarytreenode.#classTreeNode:#def_......
  • [数据结构]进制转换
    要求实现函数,借助如下自定义栈seqstack将一个正整数n转换为$$进制数并输出。输出时用大写字母A、B、C、D、E、F分别表示10、11、12、13、14、15。#include<iostream>#defineMAXSIZE100usingnamespacestd;typedefstruct{intdata[MAXSIZE];inttop;}seqs......
  • 指南针成本均线指标(CCMA)转换为通达信(TDX)的公式
    指南针成本均线指标(CCMA)转换为通达信(TDX)的公式,你可以使用通达信的公式语言(通达信公式语言类似于一种脚本语言,用于编写技术指标和策略)。以下是一个示例,展示了如何在通达信中实现CCMA指标。通达信公式语言中的CCMA指标//指南针成本均线指标(CCMA)//参数:N-计算周期,Alpha-......
  • FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
    ​《FFmpeg开发实战:从零基础到短视频上线》一书的“5.1.2 把音频流保存为PCM文件”介绍了如何把媒体文件中的音频流转存为原始的PCM音频,在样例代码的转存过程中,解码后的PCM数据未经任何加工处理,就直接保存到二进制文件。也就是说,原音频的采样频率是多少,PCM文件的采样频率也是多......