下面将介绍Java中如何处理对编码的支持、什么场合中需要编码。

一、I/O操作中存在的编码

涉及编码的地方一般都在字符都字节或字节到字符的转换上,而需要这种转换的场景主要是I/O,既包括磁盘I/O,也包括网络I/O。

 

在Java中读相关的接口为:InputStream、Charset、Reader、StreamDecoder、InputStreamReader

Reader类是Java的I/O中读字符的父类;InputStream类是读取字节的父类。

 

写相关的接口为:OutputStream、Charset、Writer、StreamEncoder、OutputStreamWriter

 

二、内存操作中的编码

Java中用String表示字符串,所以String类就提供了转换到字节的方法,也自持将字节转换为字符串的构造函数。

String s = "这是一段中文字符串";byte[] b = s.getBytes("UTF-8");String n = new String(b,"UTF-8");

 

还有一种方法是使用废弃的ByteToCharConverter和CharToByteConverter类:

ByteToCharConverter btc = ByteToCharConverter.getConverter("UTF-8");char c[] = btc.convertAll(byteArray);CharToByteConverter ctb = CharToByteConverter.getConverter("UTF-8");byte[] b = ctb.convertAll(c);

不过它们现在已经被Charset类替代:

Charset charset = Charset.forName("UTF-8");ByteBuffer bb = charset.encode(string);CharBuffer cb = charset.decode(bb);