• 【Java基础】字符串、字符流中的编码解码问题、字符流写数据的5种方式、字符流读数据的2种方式及复制Java文件


    目录

    一、字符串中的编码解码问题

    二、字符流中的编码解码问题

    三、字符流写数据的5种方式

    四、字符流读数据的2种方式

    五、字符流复制Java文件


    一、字符串中的编码解码问题

    相关方法:

    方法名说明
    byte[] getByte()使用平台的默认字符集将该String编码为一系列字节
    byte[] getBytes(String charsetName)使用指定的字符集将该String编码为一系列字节
    String(byte[] bytes)使用平台的默认字符集解码指定的字节数组来创建字符串
    String(byte[] byte,String charsetName)通过指定的字符集解码指定的字节数组来创建字符串

    代码演示:

    1. public class StringDemo {
    2. public static void main(String[] args) throws UnsupportedEncodingException {
    3. //定义一个字符串
    4. String s = "中国";
    5. //byte[] bys = s.getBytes(); //[-28, -72, -83, -27, -101, -67]
    6. //byte[] bys = s.getBytes("UTF-8"); //[-28, -72, -83, -27, -101, -67]
    7. byte[] bys = s.getBytes("GBK"); //[-42, -48, -71, -6]
    8. System.out.println(Arrays.toString(bys));
    9. //String ss = new String(bys);
    10. //String ss = new String(bys,"UTF-8");
    11. String ss = new String(bys,"GBK");
    12. System.out.println(ss);
    13. }
    14. }

    二、字符流中的编码解码问题

    字符流中和编码问题相关的两个类

    InputStreamReader:是从字节流到字符流的桥梁

    它读取字节,并使用指定的编码将其解码为字符

    它使用的字符集可以由名称指定,也可以被明确指定,或者可以接收平台的默认字符集

    OutputStreamWriter:是从字符流到字节流的桥梁

    是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节

    它使用的字符集可以由名称指定,也可以被明确指定,或者可以接收平台的默认字符集

    构造方法:

    方法名说明
    InputStreamReade(InputStream in)使用默认字符编码创建InputStreamReader对象
    InputStreamReade(InputStream in,String chatset)使用指定的字符编码创建InputStreamReader对象
    OutputStreamWriter(OutputStream out)使用默认字符编码创建OutputStreamWrite对象
    OutputStreamWrite(OutputStream out,String charset)使用指定的字符编码创建OutputStreamWriter对象

    代码演示:

    1. public class ConversionStreamDemo {
    2. public static void main(String[] args) throws IOException {
    3. //OutputStreamWriter osw = new OutputStreamWriter(new
    4. FileOutputStream("myCharStream\\osw.txt"));
    5. OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"),"GBK");
    6. osw.write("中国");
    7. osw.close();
    8. //InputStreamReader isr = new InputStreamReader(new
    9. FileInputStream("myCharStream\\osw.txt"));
    10. InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\osw.txt"),"GBK");
    11. //一次读取一个字符数据
    12. int ch;
    13. while ((ch=isr.read())!=-1) {
    14. System.out.print((char)ch);
    15. }
    16. isr.close();
    17. }
    18. }

    三、字符流写数据的5种方式

    方法介绍:

    方法名说明
    void write(int c)写一个字符
    void write(char[] cbuf)写入一个字符数组
    void write(char[] cbuf,int off,int len)写入字符数组的一部分
    void write(String str)写一个字符串
    void write(String str,int off,int len)写一个字符串的一部分

    刷新和关闭的方法:

    方法名说明
    flush()刷新流,之后还可以继续写数据
    close()关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭

    代码演示:

    1. public class OutputStreamWriterDemo {
    2. public static void main(String[] args) throws IOException {
    3. OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
    4. //void write(int c):写一个字符
    5. osw.write(97);
    6. osw.write(98);
    7. osw.write(99);
    8. //void writ(char[] cbuf):写入一个字符数组
    9. char[] chs = {'a', 'b', 'c', 'd', 'e'};
    10. osw.write(chs);
    11. //void write(char[] cbuf, int off, int len):写入字符数组的一部分
    12. osw.write(chs, 0, chs.length);
    13. osw.write(chs, 1, 3);
    14. //void write(String str):写一个字符串
    15. osw.write("abcde");
    16. //void write(String str, int off, int len):写一个字符串的一部分
    17. osw.write("abcde", 0, "abcde".length());
    18. osw.write("abcde", 1, 3);
    19. //释放资源
    20. osw.close();
    21. }
    22. }

    四、字符流读数据的2种方式

    方法介绍:

    方法名说明
    int read()一次读一个字符数据
    int read(char[] cbuf)一次读一个字符数组数据

    代码演示:

    1. public class InputStreamReaderDemo {
    2. public static void main(String[] args) throws IOException {
    3. InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\ConversionStreamDemo.java"));
    4. // int read():一次读一个字符数据
    5. int ch;
    6. while ((ch=isr.read())!=-1) {
    7. System.out.print((char)ch);
    8. }
    9. // int read(char[] cbuf):一次读一个字符数组数据
    10. char[] chs = new char[1024];
    11. int len;
    12. while ((len = isr.read(chs)) != -1) {
    13. System.out.print(new String(chs, 0, len));
    14. }
    15. //释放资源
    16. isr.close();
    17. }
    18. }

    五、字符流复制Java文件

    需求:

    使用便捷流对象,把模块目录下的“ConversionStreamDemo.java” 复制到模块目录下的“Copy.java”

    实现步骤:

    ● 根据数据源创建字符输入流对象

    ● 根据日志目的地创建字符输出流对象

    ● 读写数据,复制文件

    ● 释放资源

    代码实现:

    1. public class CopyJavaDemo02 {
    2. public static void main(String[] args) throws IOException {
    3. //根据数据源创建字符输入流对象
    4. FileReader fr = new FileReader("myCharStream\\ConversionStreamDemo.java");
    5. //根据目的地创建字符输出流对象
    6. FileWriter fw = new FileWriter("myCharStream\\Copy.java");
    7. //读写数据,复制文件
    8. int ch;
    9. while ((ch=fr.read())!=-1) {
    10. fw.write(ch);
    11. }
    12. char[] chs = new char[1024];
    13. int len;
    14. while ((len=fr.read(chs))!=-1) {
    15. fw.write(chs,0,len);
    16. }
    17. //释放资源
    18. fw.close();
    19. fr.close();
    20. }
    21. }

     

  • 相关阅读:
    『 MySQL数据库 』数据库之表的约束
    正态分布,二维正态分布,卡方分布,学生t分布——概率分布学习 python
    RESTful API的性能优化:如何提高API的响应速度和吞吐量
    join方法使用案例
    遥感语义分割、变化检测论文小trick合集(持续更新)
    K8S篇之实现利用Prometheus监控pod的实时数据指标
    锁升级的实现流程
    机器学习中分类问题的初步
    C练题笔记之:Leetcode-658. 找到 K 个最接近的元素
    Anaconda创建虚拟环境的常见命令
  • 原文地址:https://blog.csdn.net/m0_61961937/article/details/126819449