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();
    }
}
posted @ 2022-07-26 21:40  yesyes1  阅读(15)  评论(0编辑  收藏  举报