目录
相关方法:
方法名 | 说明 |
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);
- }
- }
字符流中和编码问题相关的两个类
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();
- }
- }
方法介绍:
方法名 | 说明 |
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();
- }
- }
方法介绍:
方法名 | 说明 |
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();
- }
- }
需求:
使用便捷流对象,把模块目录下的“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();
- }
- }