1、基本文件读取输出
String file="C:/Users/Administrator/Desktop/a.txt";
String charset = "UTF-8";
FileOutputStream outputStream = new FileOutputStream(file);
OutputStreamWriter writer = new OutputStreamWriter(outputStream,charset);
try {
writer.write("这是要保存的中文");
} catch (IOException e) {
e.printStackTrace();
} finally {
writer.close();
}
FileInputStream inputStream = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(inputStream,charset);
StringBuffer buffer = new StringBuffer();
char[] buf = new char[64];
int count = 0;
try {
while((count = reader.read(buf))!=-1){
buffer.append(buf,0,count);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
reader.close();
}
System.out.println(buffer);
2、String自带的字节到字符的转换功能
String str = "I am 右前";
byte[] b = str.getBytes("UTF-8"); //将字符串以UTF-8格式进行编码
String n = new String(b,"UTF-8"); //将字符串以UTF-8格式进行解码
3、Charset提供的字节到字符的转换
String str1 = "I am 电脑";
Charset charset1 = Charset.forName("UTF-8"); //通过forName找到Charset类
ByteBuffer byteBuffer = charset1.encode(str1); //将字符串以UTF-8格式进行编码
while(byteBuffer.hasRemaining()){
System.out.println((char)byteBuffer.get());
}
byteBuffer.flip();
CharBuffer charBuffer = charset1.decode(byteBuffer); //将字符串以UTF-8格式进行解码
System.out.println(charBuffer.toString());
4、ByteBuffer提供的软转换(字节缓冲区,常用于程序向网络中传送数据)(未完成)
/*
* position是当前读写的位置。
* limit是最大能读写的位置。
* capacity是缓冲区的容量。
*/
ByteBuffer heapByteBuffer = ByteBuffer.allocate(1024); //创建一个ByteBuffer,初始化状态下,postion为0,limit=capacity=缓冲区大小
char[] c3 = buffer.toString().toCharArray();
for(int i = 0;i < c3.length;i++){
heapByteBuffer.put((byte) c3[i]); //往缓冲区放一个字节,position就会往后移动一下,但是不会超过limit。如果超过会报错。
}
heapByteBuffer.flip(); //flip方法会把limit设为position的值,而position还原为0,为读缓冲区做准备。
byte[] bb = new byte[heapByteBuffer.limit()];
ByteBuffer b1 = heapByteBuffer.get(bb); //从缓冲区内读取一个字节,position会往后移动一下,但是不会超过limit,如果超过会报错。
while(b1.hasRemaining()){
System.out.println((char)b1.get());
}
5、JAVA内部实现原理及过程
(1)得到一个CharSet
在JDK源码中提供两种方式得到一个CharSet实例:
CharSet cs = CharSet.forName(“编码方式”);
CharSet cs = CharSet.defaultCharSet();
第一种方法返回一个指定字符格式的CharSet,第二种方法返回当前虚拟机默认的字符编码格式的CharSet。
(2)使用CharSet
得到一个CharSet实例后,我们需要创建一个编码器和一个解码器,使用下面方法进行创建:
CharSetDecoder decoder = cs.newDecoder();
CharSetEncoder encoder = cs.newEncoder();
接着我们把ByteBuffer传递给decoder进行编码,返回一个CharBuffer:
CharBuffer cb = decoder.decode(inputData);
然后我们可以使用encoder进行解码返回一个ByteBuffer:
ByteBuffer outputData = encoder.encode(cb);
接下来可以进行写等其它操作。