黑马程序员技术交流社区
标题:
IO技术中带编码转换流的问题
[打印本页]
作者:
贾成龙
时间:
2012-7-25 22:45
标题:
IO技术中带编码转换流的问题
import java.io.*;
class TransStreamDemo
{
public static void main(String[] args)throws IOException
{
FileReader fr=new FileReader("haha.txt");
OutputStreamWriter osw=
new OutputStreamWriter(new FileOutputStream("haha.txt"),"utf-8");
//为什么同名就不行呢?同名会发生下面的异常?求各位大侠帮忙解释一下。
/*
Exception in thread "main" java.lang.IndexOutOfBoundsException
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:121)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
at TransStreamDemo.main(TransStreamDemo.java:11)
*/
char[] buf=new char[10];
int len=fr.read(buf);
osw.write(buf,0,len);
osw.close();
fr.close();
}
}
作者:
乐峰
时间:
2012-7-25 22:57
IndexOutOfBoundsException指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
import java.io.*;
class TransStreamDemo
{
public static void main(String[] args)throws IOException
{
FileReader fr=new FileReader("haha.txt");//你读取文件用的是字符流,字符流默认的编码方式是GBK。
OutputStreamWriter osw=
new OutputStreamWriter(new FileOutputStream("haha.txt"),"utf-8");//
你写入文件用的是字节转字符的桥梁流,这个流可以重新编写编码方式,你采用的是utf-8,你采用两种不同方式的编码方式,你在读入和写出的过程中肯定会出现超出范围的异常。因为GBK编码是4个字节,而utf-8是6个字节,超出范围,一定出现异常,把utf-8去掉就好了
//为什么同名就不行呢?同名会发生下面的异常?求各位大侠帮忙解释一下。
/*
Exception in thread "main" java.lang.IndexOutOfBoundsException
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:121)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
at TransStreamDemo.main(TransStreamDemo.java:11)
*/
char[] buf=new char[10];
int len=fr.read(buf);
osw.write(buf,0,len);
osw.close();
fr.close();
}
}
作者:
李菁
时间:
2012-7-25 23:22
你都说到了字符流默认编码方式是GBK,你在字节流换为字符时,又重新规定了编码方式为UTF-8。
两种编码方式操作读写,肯定会出异常。GBK一个字符占两个字节;UTF-8一个字符占三个字节。
希望有帮助
作者:
黄锐
时间:
2012-7-25 23:29
字符流默认编码方式为GBK它是中文编码表并且兼容GB2312, OutputStreamWriter osw=
new OutputStreamWriter(new FileOutputStream
("haha.txt"),"utf-8");
上面这句代码又把 haha.txt默认的GBK改为了utf-8,所以会出现乱码
作者:
王志明
时间:
2012-7-25 23:47
我说说重点:
输出流和输入流同时操作一个文件,当然会出问题
一个读,一个有同时在写,能行么?
作者:
贾成龙
时间:
2012-7-26 20:02
谢谢各位大侠!明白了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2