黑马程序员技术交流社区

标题: 操作数组ByteArrayOutputStream的转换问题。 [打印本页]

作者: 还是回去火星吧    时间: 2014-3-4 18:26
标题: 操作数组ByteArrayOutputStream的转换问题。
本帖最后由 还是回去火星吧 于 2014-3-4 18:29 编辑

  1. <P>import java.io.*;
  2. class Test{
  3. public static void main(String[] args)throws Exception{
  4. //数据源
  5. BufferedReader bfr=new BufferedReader(new InputStreamReader(new FileInputStream("E:\\DD\\d.txt"))) //这个目录如下图。
  6. //数据目的
  7. ByteArrayOutputStream bos=new ByteArrayOutputStream();
  8. //将源数据写入目的数据。
  9. int by=0;
  10. while((by=bfr.read())!=-1){
  11. bos.write(by);
  12. }
  13. System.out.println(bos.size());
  14. System.out.println(bos.toString());
  15. bos.writeTo(new FileOutputStream("E:\\DD\\e.txt")); //写入之后全是乱码,前面获取的时候,需要转换在存入缓冲区吗?</P>
  16. <P>//怎么操作,存入后,还是一模一样的字符?
  17. }
  18. }</P>
复制代码
读取d记事本,写入e记事本,但是变成了乱码,怎么操作才不会成乱码呢?



作者: e.c    时间: 2014-3-4 19:06
本帖最后由 e.c 于 2014-3-4 19:07 编辑

同问,怎么是乱码
作者: 薛旻    时间: 2014-3-4 19:17
ByteArrayOutputStream操作的是字节,通过FileInputStream读取字节,然后通过InputStreamReader转为了字符,通过BufferedReader读取字符写入字节,这个逻辑就乱了,而且BufferedReader的read方法读一个字符返回的是它的assic码,然后写入字节解码就乱了。
我改了你的代码,如下

  1. import java.io.*;
  2. class Test{
  3. public static void main(String[] args)throws Exception{
  4. //数据源
  5. // BufferedReader bfr=new BufferedReader(new InputStreamReader(new FileInputStream("d:\\d.txt"))); //这个目录如下图。
  6. FileInputStream fis = new FileInputStream("d:\\d.txt");
  7. //数据目的
  8. ByteArrayOutputStream bos=new ByteArrayOutputStream();
  9. //将源数据写入目的数据。
  10. byte[] bys = new byte[1024];
  11. int by = 0;
  12. while(( by = fis.read(bys))!=-1){
  13. bos.write(bys,0,by);
  14. }
  15. System.out.println(bos.size());
  16. System.out.println(bos.toString());
  17. bos.writeTo(new FileOutputStream("d:\\e.txt")); //写入之后全是乱码,前面获取的时候,需要转换在存入缓冲区吗?
  18. //怎么操作,存入后,还是一模一样的字符?
  19. }
  20. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2