六,转换流

news/2024/10/21 20:25:47

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提供了一种简化的方式来读写文件中的字符数据。在实际编程中,合理使用转换流可以大大提高程序处理文本数据的能力。通过上述示例和解释,你应该能够更好地理解和应用转换流。

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

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

相关文章

tms fnc ui

tms fnc uitms fnc ui 这组界面控件,支持DELPHI的VCL和FMX,还支持FPC的LCL。 1)TTMSFNCNavigationPanel2)TTMSFNCTileList3)本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/18490245

第6课 测试用例设计

1.黑盒测试方法2.白盒测试方法术语一: • 动态测试(dynamic testing):通过运行软件的组 件或 系统来测试软件 • 静态测试(static testing):对组件的规格说明书 进行 评审,对静态代码进行走查 • 正式评审(formal review):对评审过程及需求文 档的 一种特定评审 • …

转载 兔兔电脑机器码修改工具1.0

使用说明: 1.关闭**毒软件(1.易语言编写可能会误报 2.需要修改系统信息可能会被拦截); 2.管理员运行; 3.根据需要修改机器码(部分系统需要运行兼容性初始化) 4.修改主板会屏蔽网卡,所以要先修改网卡然后再修改主板; 5.重启电脑即可恢复,网卡修改不会恢复,需要手动改…

机器学习基本介绍

1、人工智能概述 人工智能发展必备三要素:数据 算法 计算力 CPU,GPU,TPU计算力之CPU、GPU对比:CPU主要适合I\O密集型的任务GPU主要适合计算密集型任务 1.1、工智能、机器学习和深度学习的关系人工智能和机器学习,深度学习的关系:机器学习是人工智能的一个实现途径深度学习…

考场环境 NoiLinux 测试

觉得还是有必要提前练一下 用的是官网的 NoiLinux.iso 全程断网下载 虽然不知道实机预安装系统时是不是断网的 NoiLinux,但是保险一点还是选了断网省选的时候,Windows 里只有画图和 Dev-C++分辨率非常构式,需要手动调分辨率,咱们电脑是 1920*1080(没找到适配这个电脑的分辨…

面试题速刷 - 知识广度2

有哪些前端攻击?如何预防? XSS 跨站脚本攻击预防:尖括号替换,Vue中用插值{}不会发生XSS攻击。 CSRF 跨站请求伪造预防:服务端严格控制跨域,验证机制二次确认 SameSite禁止第三方cookie 点击劫持演示一下:预防: 1.判断两个iframe域名是否一致 2.让当前网页只在自己ifram…