java中编码表编码解码
import java.io.UnsupportedEncodingException; import java.util.Arrays; public class Demo1 { public static void main(String[] args) throws UnsupportedEncodingException { String s = "中国"; // 使用字符串的getBytes()方法编码为UTF-8字节码 byte[] bytes = s.getBytes("UTF-8"); // UTF-8中每个中文字符占3个字节 // [-28, -72, -83, -27, -101, -67] System.out.println(Arrays.toString(bytes)); // 使用字符串的getBytes()方法编码为GBK节码 byte[] bytes1 = s.getBytes("GBK"); // GBK中每个中文字符占2个字节 // [-42, -48, -71, -6] System.out.println(Arrays.toString(bytes1)); // 解码:此时bytes为UTF-8编码,bytes1为GBK编码 // 使用String的构造函数进行解码 String s1 = new String(bytes,"UTF-8"); String s2 = new String(bytes1,"GBK"); System.out.println(s1); System.out.println(s2); } }
/* * 字符流中编码解码 * 从字符流到字节流使用的类: * InputStreamReader和OutputStreamWriter * */ import java.io.*; public class Demo2 { public static void main(String[] args) throws IOException { /* * API: * OutputStreamWriter (OutputStream out,String charsetName) * InputStreamReader (InputStream out,String charsetName) * */ // FileOutputStream fileOutputStream = new FileOutputStream("java基础\\src\\com\\io\\encoding\\test.txt"); // OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "GBK"); // 合并为一步 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("java基础\\src\\com\\io\\encoding\\test.txt"),"GBK"); // 使用该对象的write()写入 osw.write("中国"); // 关闭资源 osw.close(); // 读取 InputStreamReader isr = new InputStreamReader(new FileInputStream("java基础\\src\\com\\io\\encoding\\test.txt"), "GBK"); // 一次读取一个字符数据 int read; while ((read = isr.read()) != -1){ System.out.print((char)read); } // 关闭资源 isr.close(); } }
import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; public class Write { public static void main(String[] args) throws IOException{ // 1.一次写一个字符 // method1(); // 2.一次写一个字符数组 // method2(); // 3.一次写一个字符数组的一部分 // method3(); // 4.一次写一个字符串 // method4(); // 5.一次写一个字符串的一部分 method5(); } /* * 构造函数源码: * public void write(int c) throws IOException { se.write(c); } /* * Writes a portion of an array of characters. * * @param cbuf Buffer of characters * @param off Offset from which to start writing characters * @param len Number of characters to write * * @exception IOException If an I/O error occurs * public void write(char cbuf[], int off, int len) throws IOException { se.write(cbuf, off, len); } /** * Writes a portion of a string. * * @param str A String * @param off Offset from which to start writing characters * @param len Number of characters to write * * @exception IOException If an I/O error occurs * public void write(String str, int off, int len) throws IOException { se.write(str, off, len); } /** * Flushes the stream. * * @exception IOException If an I/O error occurs **/ public static void method1() throws IOException{ OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("java基础\\src\\com\\io\\encoding\\test.txt")); osw.write(97); osw.write(98); osw.write(99); // 因为字符流写数据会保存到缓冲区中,需要调用刷新流刷新 // 调用刷新流 // osw.flush(); // 使用close会先进行自动刷新 // 但是调用close()后就不能对此流进任何操作了 osw.close(); } public static void method2() throws IOException{ OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("java基础\\src\\com\\io\\encoding\\test.txt")); char[] chars = {'a','b','c','e','f','g'}; osw.write(chars); osw.close(); } public static void method3() throws IOException{ OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("java基础\\src\\com\\io\\encoding\\test.txt")); char[] chars = {'a','b','c','e','f','g'}; // 从第1个开始,一共写5个 osw.write(chars,0,4); osw.close(); } public static void method4() throws IOException{ OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("java基础\\src\\com\\io\\encoding\\test.txt")); osw.write("你好"); osw.close(); } public static void method5() throws IOException{ OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("java基础\\src\\com\\io\\encoding\\test.txt")); osw.write("你好",0,1); osw.close(); } }
/* * 字符流读数据的2种方式 * */ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class Read { public static void main(String[] args) throws IOException { InputStreamReader isr = new InputStreamReader(new FileInputStream("java基础\\src\\com\\io\\encoding\\test.txt")); // 一次读取一个字符数据 // method1(isr); // 一次读取一个字符数组 method2(isr); isr.close(); } // 一次读取一个字符数据 public static void method1(InputStreamReader isr) throws IOException { int read; while ((read = isr.read()) != -1){ System.out.print((char) read); } } // 一次读取一个字符数组 public static void method2(InputStreamReader isr) throws IOException{ char[] chars = new char[1024]; int read; while ((read = isr.read(chars)) != -1){ System.out.print(new String(chars,0,read)); } } }
/* * 将Before.java复制到Copy.java * */ import java.io.*; public class Demo { public static void main(String[] args) throws IOException { // 数据源 InputStreamReader isr = new InputStreamReader(new FileInputStream("java基础\\src\\com\\io\\encoding\\copy\\Before.java")); // 目标 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("java基础\\src\\com\\io\\encoding\\copy\\Copy.java")); // 读取数据源 char[] chars = new char[1024]; int readLength; while ((readLength = isr.read(chars)) != -1){ // 此时chars为读取的数据 // 将其转换成字符串 String read = new String(chars, 0, readLength); // 将读取的数据写入目标 osw.write(read); } isr.close(); osw.close(); } }
缺点是不能编码解码
/* * 使用子类FileReader和FileWriter * 将Before.java复制到Copy.java * 缺点是不能编码解码 * */ import java.io.*; public class Demo { public static void main(String[] args) throws IOException { /* * 构造函数源码: * public FileReader(String fileName) throws FileNotFoundException { super(new FileInputStream(fileName)); } * * public FileWriter(String fileName) throws IOException { super(new FileOutputStream(fileName)); } * */ // 数据源 FileReader fileReader = new FileReader("java基础\\src\\com\\io\\encoding\\newCopy\\Before.java"); // 目标 FileWriter fileWriter = new FileWriter("java基础\\src\\com\\io\\encoding\\newCopy\\Copy.java"); // 读取数据源 char[] chars = new char[1024]; int readLength; while ((readLength = fileReader.read(chars)) != -1){ fileWriter.write(chars,0,readLength); } // 关闭资源 fileWriter.close(); fileReader.close(); } }