3 回答
TA贡献1803条经验 获得超6个赞
我来尝试回答一下,现学现卖 ^_^ (我使用 linux 可能不大一样)
先看文档中文,它有五个方法
/**
* write(String str)
* 写入字符串。
* write(int oneChar)
* 写入单个字符。要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。用于支持高效单字符输出的子类应重写此方法。
* write(char[] buf)
* 写入字符数组
* write(String str, int offset, int count)
* write(char[] buf, int offset, int count)
*/
用的是 write(int oneChar) 这一种,写入单个字符表,用计算器高位被忽略就是
00000000|00110010 //50
1|00000000|00110010 //65536 + 50
-------------------
然后两者其实结果是一样的。过程如下,只看最后两段即可
import java.io.FileWriter;
/**
* Created by star on 11/29/13.
* write(char[] buf, int offset, int count)
* write(String str)
* write(int oneChar)
* write(char[] buf)
* write(String str, int offset, int count)
*/
public class Encode {
public static void main (String [] args) {
FileWriter fw = null;
try {
// *输出字符串"妳好"
// fw = new FileWriter("/home/star/unicode.txt");
// String a = "妳好";
// fw.write(a);
// fw.close();
// *这里打印的不是50,而是50的16进制所代表的值「2」
// fw = new FileWriter("/home/star/unicode.txt");
// int a = 50;
// fw.write(a);
// fw.close();
// *比16位高的位数被忽略。会打印相同的两个「2」
// fw = new FileWriter("/home/star/unicode.txt");
// fw.write(50);
// fw.flush();
// fw.write(65536 +50);
// fw.flush();
// fw.close();
// *我想你要的结果是这样的吧 0x4e00 开始
fw = new FileWriter("/home/star/unicode.txt");
for (int a = 19968 ; a<19968 + 500;a++) {
fw.write(a);
}
fw.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("文件写入错误");
System.exit(-1);
}
}
}
添加回答
举报