黑马程序员技术交流社区

标题: 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