I/O流、字符集
1)InputStream、OutPutStream是输出输入的基础流,均为抽象类,提供了read和writer方法,所有的子类均实现read和writer方法,read在遇到输入源的结尾时返回-1。
2)Reader、Writer专门为Unicode文本设计的输入输出基础流,同样是抽象类亦提供了read和writer方法,read遇到文件结尾时返回-1。
3)流对象使用完记得及时调用close关闭流,释放资源,InputStream、OutPutStream、Reader、Writer实现的接口如下图所示:
4)运行平台的不同,导致文件的分隔符有可能不尽相同,Java提供了获取平台的文件分隔符,可以通过java.io.File.separator获取平台的文件分隔符。
5)字符集
由于JDK版本的变化,同一个字符集可能有多个别名,可以通过如下代码获取字符集的所有别名:
Charset csetCharset = Charset.forName("euc-cn"); Set<String> aliaseSet = csetCharset.aliases(); for (String alia : aliaseSet) { System.out.println(alia); }
通过如下代码获取程序支持的字符集:
SortedMap<String, Charset> charsetSortedMap = Charset.availableCharsets(); for (String name : charsetSortedMap.keySet()) { System.out.println(name); }
6)字符编码
由于本地编码并不能表示所有的Unicode字符,所以如果某个字符不能表示将被转换为?,同样解码时无法识别的输入将会被转化成Unicode的“替代字符”(‘\uFFFD’)。
字符串编码解码代码如下:
// 字符串编码 String str="字符串编码解码"; Charset charset=Charset.forName("GBK"); ByteBuffer buffer= charset.encode(str); byte[]bytes=buffer.array(); // 字符串解码 ByteBuffer buffer2=ByteBuffer.wrap(bytes,0,bytes.length); CharBuffer charBuffer=charset.decode(buffer2); String result=charBuffer.toString(); // 建议调用trim(),防止由于编码的问题导致解码后出现多余的空心方格 System.out.println(result.trim());
本文版权归作者ysp(博文地址:http://www.cnblogs.com/ysp99/)所有,欢迎转载和商用,请在文章页面明显位置给出原文链接并保留此段声明,否则保留追究法律责任的权利,其他事项,可留言交流。