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

简介: 字符串、字符流中的编码解码问题、字符流写数据的5种方式、字符流读数据的2种方式及复制Java文件的简单示例

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

相关方法:

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

代码演示:

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

image.gif

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

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

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

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

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

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

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

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

构造方法:

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

代码演示:

public class ConversionStreamDemo {
    public static void main(String[] args) throws IOException {
        //OutputStreamWriter osw = new OutputStreamWriter(new 
        FileOutputStream("myCharStream\\osw.txt"));
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"),"GBK");
        osw.write("中国");
        osw.close();
        //InputStreamReader isr = new InputStreamReader(new 
        FileInputStream("myCharStream\\osw.txt"));
        InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\osw.txt"),"GBK");
        //一次读取一个字符数据 
        int ch;
        while ((ch=isr.read())!=-1) {
            System.out.print((char)ch);
        }
        isr.close();
    }
}

image.gif

三、字符流写数据的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() 关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭

代码演示:

public class OutputStreamWriterDemo {
    public static void main(String[] args) throws IOException {
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
        //void write(int c):写一个字符 
        osw.write(97);
        osw.write(98);
        osw.write(99);
        //void writ(char[] cbuf):写入一个字符数组 
        char[] chs = {'a', 'b', 'c', 'd', 'e'};
        osw.write(chs); 
        //void write(char[] cbuf, int off, int len):写入字符数组的一部分 
        osw.write(chs, 0, chs.length); 
        osw.write(chs, 1, 3);
        //void write(String str):写一个字符串 
        osw.write("abcde");
        //void write(String str, int off, int len):写一个字符串的一部分 
        osw.write("abcde", 0, "abcde".length());
        osw.write("abcde", 1, 3);
        //释放资源 
        osw.close();
    }
}

image.gif

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

方法介绍:

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

代码演示:

public class InputStreamReaderDemo {
    public static void main(String[] args) throws IOException {
        InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\ConversionStreamDemo.java"));
        // int read():一次读一个字符数据 
        int ch; 
        while ((ch=isr.read())!=-1) { 
            System.out.print((char)ch); 
        } 
        // int read(char[] cbuf):一次读一个字符数组数据 
        char[] chs = new char[1024];
        int len;
        while ((len = isr.read(chs)) != -1) {
            System.out.print(new String(chs, 0, len));
        }
        //释放资源 
        isr.close();
    }
}

image.gif

五、字符流复制Java文件

需求:

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

实现步骤:

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

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

● 读写数据,复制文件

● 释放资源

代码实现:

public class CopyJavaDemo02 { 
    public static void main(String[] args) throws IOException { 
        //根据数据源创建字符输入流对象 
        FileReader fr = new FileReader("myCharStream\\ConversionStreamDemo.java"); 
        //根据目的地创建字符输出流对象 
        FileWriter fw = new FileWriter("myCharStream\\Copy.java"); 
        //读写数据,复制文件 
        int ch; 
        while ((ch=fr.read())!=-1) { 
        fw.write(ch); 
        } 
        char[] chs = new char[1024];
        int len; 
        while ((len=fr.read(chs))!=-1) { 
            fw.write(chs,0,len); 
        }
        //释放资源 
        fw.close(); 
        fr.close(); 
    } 
}

image.gif

目录
相关文章
|
18天前
|
Java
Java实现随机生成某个省某个市的身份证号?如何编码?
【10月更文挑战第18天】Java实现随机生成某个省某个市的身份证号?如何编码?
66 5
|
20天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
34 6
|
19天前
|
存储 Java API
深入剖析Java Map:不只是存储数据,更是设计艺术的体现!
【10月更文挑战第17天】在Java编程中,Map是一种重要的数据结构,用于存储键值对,并展现了设计艺术的精髓。本文深入剖析了Map的设计原理和使用技巧,包括基本概念、设计艺术(如哈希表与红黑树的空间时间权衡)、以及使用技巧(如选择合适的实现类、避免空指针异常等),帮助读者更好地理解和应用Map。
58 3
|
12天前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
90 60
|
2天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
15 6
|
5天前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
20 2
|
9天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
11天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
23 4
|
13天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
13天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
下一篇
无影云桌面