Java笔记第五弹
编码表
将字符存储到计算机中----编码;反之,则为解码;
GBK编码:最常用的中文码表
GB18030--最新的中文码表
Unicode字符集:业界的一种标准,也称为统一码、万国码
UTF-8编码:可以用来表示Unicode标准中任意字符
编码规则:
128个US-ASCII字符,只需要一个字节编码
拉丁文等字符,需要两个字节编码
大部分常用字(含中文),使用三个字节编码
其他极少使用的Unicode辅助字符,使用四字节编码
字符串中的编码解码问题
//编码
byte[] getBytes();//默认字符集
byte[] getBytes(String charsetName);//指定字符集
//解码
String(byte[] bytes);//默认字符集
String(byte[] bytes,String charsetName);//指定字符集
相关应用:
编码和解码需要用同一个字符集
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
String s="中国";
byte[] by=s.getBytes("GBK");
System.out.println(Arrays.toString(by));
String ss=new String(by,"GBK");
System.out.println(ss);
}
}
字符流中的编码解码问题
字符流抽象基类:Reader、Writer
相关的两个类:InputStreamReader、OutputStreamWriter
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
//写入
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myByteStream\\osw.txt"),"UTF-8");
osw.write("中国");
osw.close();
//读出
InputStreamReader isr=new InputStreamReader(new FileInputStream("myByteStream\\osw.txt"),"UTF-8");
int ch;
while((ch=isr.read())!=-1){
System.out.println((char)ch);
}
isr.close();
}
}
字符流写数据的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);//写一个字符串的一部分
相关应用:
//写入字符
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
osw.write(97);
osw.flush();//刷新流
osw.write(98);
osw.close();//释放资源时,先进行刷新操作
//释放资源后,不能再向里面写入数据
}
}
//写入字符数组
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
char[] arr={'a','b','c','d','e'};
osw.write(arr);
osw.close();
}
}
//写入一部分字符数组
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
char[] arr={'a','b','c','d','e'};
osw.write(arr,0,arr.length);
osw.close();
}
}
//写入字符串
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
osw.write("asdfg");
osw.close();
}
}
//写入一部分字符串
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
osw.write("asdfg",0,"asdfg".length());
osw.close();
}
}
字符流读数据的2种方式
int read();//一次读一个字符数据
int read(char[] cbuf);//一次读一个字符数组数据
//一次读一个字符数据
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
InputStreamReader isr=new InputStreamReader(new FileInputStream("myByteStream\\isr.txt"));
int ch;
while((ch=isr.read())!=-1){
System.out.println((char)ch);
}
isr.close();
}
}
//一次读一个字符数组数据
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
InputStreamReader isr=new InputStreamReader(new FileInputStream("myByteStream\\isr.txt"));
char[] arr=new char[1024];
int len;
while ((len = isr.read(arr)) != -1) {
System.out.println(new String(arr,0,len));
}
isr.close();
}
}
案例:复制Java文件
//基础版
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("myByteStream\\Copy.java"));
InputStreamReader isr=new InputStreamReader(new FileInputStream("myByteStream\\ConversionStreamDemo.java"));
int ch;
while((ch=isr.read())!=-1){
osw.write(ch);
}
char[] arr=new char[1024];
int len;
while((len=isr.read(arr))!=-1){
osw.write(new String(arr,0,len));
}
osw.close();
isr.close();
}
}
//升级版
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
FileWriter fw=new FileWriter("myCharStream\\Copy.java");
FileReader fr=new FileReader("myCharStream\\ConversionStreamDemo.java");
int ch;
while((ch=fr.read())!=-1){
fw.write(ch);
}
char[] arr=new char[1024];
int len;
while((len=fr.read(arr))!=-1){
fw.write(new String(arr,0,len));
}
fw.close();
fr.close();
}
}