博客
关于我
Java IO整理总结之字符流
阅读量:637 次
发布时间:2019-03-14

本文共 2292 字,大约阅读时间需要 7 分钟。

Java IO系统提供了丰富的类来处理字符和字节的读写操作,这些类按照功能和目的可以分为字节流和字符流。了解它们的区别和适用场景是编程时的关键。

字节流 vs 字符流的区别

  • 字节流:处理单个字节(0-255),不涉及字符编码转换。
  • 字符流:处理Unicode字符(2-4字节),需要考虑编码方式,如GBK、UTF-8等。

常用字节流类

  • 输入

    • FileInputStream:读取文件。
    • ByteArrayInputStream:读取字节数组。
    • BufferedInputStream:提供缓冲,提高读取速度。
    • PushbackInputStream:允许回退。
  • 输出

    • FileOutputStream:写入文件。
    • ByteArrayOutputStream:写入字节数组。
    • BufferedOutputStream:提供缓冲,提高写入速度。
  • 转换

    • InputStreamReader:从字节流读取字符流。
    • OutputStreamWriter:将字符流转为字节流。

常用字符流类

  • 输入

    • FileReader:读取字符文件。
    • StringReader:读取字符串。
    • BufferedReader:提供缓冲,处理大量字符。
  • 输出

    • FileWriter:写入字符文件。
    • StringWriter:写入字符串缓冲区。
    • BufferedWriter:提供缓冲,提高写入效率。

使用原则

  • 按数据格式:确定数据是纯二进制还是文本。
  • 按输入和输出:选择合适的流。
  • 是否需要转换:使用InputStreamReader或OutputStreamWriter进行编码/解码。
  • 缓冲需求:使用缓冲流提高性能。
  • 线程安全:处理多线程时,注意同步机制。
  • 示例代码解读

    public class BrAndBwOrPw {    public static void main(String[] args) throws IOException {        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("demo\\test.txt")));        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("demo\\test2.txt")));        PrintWriter pw = new PrintWriter("demo\\test3.txt");        String s;        while ((s = br.readLine()) != null) {            System.out.println(s);            bw.write(s);            bw.newLine();            pw.println(s);        }        bw.flush();        br.close();        bw.close();        pw.flush();        pw.close();    }}
    • 读取:使用BufferedReader包装InputStreamReader读取文本,每次读取一行。
    • 写入:使用BufferedWriter和OutputStreamWriter写入文件,bw.write()一次写入多个字符,新Line()添加换行符。

    RandomAccessFile的使用场景

    用于随机访问文件,定位到特定位置读写大对象。例如:

    public class RafDemo {    public static void main(String[] args) throws IOException {        File file = new File("demo", "rafTest.bin");        if (!file.exists()) {            file.createNewFile();        }        RandomAccessFile raf = new RandomAccessFile(file, "rw");        raf.seek(0);        byte[] data = {(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF};        raf.write(data);        raf.writeInt(0x12345678);        byte[] read_data = new byte[4];        raf.read(read_data);        System.out.println("Read: " + String.valueOf(read_data));        raf.close();    }}
    • 读写整数:直接使用writeInt()和read()方法,方便处理固定大小的数据结构。

    总结

    选择合适的IO流类是编程中的关键。理解字节流和字符流的区别,正确使用编码转换和缓冲流,可以提高程序的性能和稳定性。复杂的应用场景可以考虑使用RandomAccessFile或其他高级IO流,确保数据读写的准确性和效率。

    转载地址:http://ixflz.baihongyu.com/

    你可能感兴趣的文章
    NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
    查看>>
    NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
    查看>>
    NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
    查看>>
    NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_实际操作---大数据之Nifi工作笔记0020
    查看>>
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
    查看>>
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
    查看>>