黑马程序员技术交流社区

标题: InputStreamReader的问题 [打印本页]

作者: 谭荣强    时间: 2014-4-25 17:00
标题: InputStreamReader的问题
InputStreamReader可以和BufferedReader的组合,使用readLine()方法,读取字节流。能操作媒体文件吗(如图片等,我试了下,好像乱码),纯文本也用到它,难道它只能用在键盘录入上?
作者: 电饭煲    时间: 2014-4-25 17:16
求详细代码
作者: 谭荣强    时间: 2014-4-25 17:39
电饭煲 发表于 2014-4-25 17:16
求详细代码

显示文件损坏
public static void main(String[] args) {
                // TODO Auto-generated method stub
                copyPic("d:\\00\\1.png");
                       
        }
        public static void copyPic(String pathName){
                BufferedReader bi=null;
                BufferedOutputStream bo=null;
                try {
                        //转换流 使用readLine方法。
                        InputStreamReader ins = new InputStreamReader(new FileInputStream(pathName));
                        bo= new BufferedOutputStream(new FileOutputStream("d:\\1.png"));
                         bi= new BufferedReader(ins);                         
                // byte[] buf = new byte[1024*1024];
                         String line=null;
                         while((line=bi.readLine())!=null){
                                 bo.write(line.getBytes());
                                 bo.flush();
                         }
                } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                finally{
                        //关闭资源
                        if(bi!=null){
                                try {
                                        bi.close();
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                        }
                        if(bo!=null){
                                try {
                                        bo.close();
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                        }
                }
        }

}
作者: 王春蕾    时间: 2014-4-25 17:45
BufferedReader不是读取字符流的吗??对图片操作应该使用字节流
作者: 世界公民    时间: 2014-4-25 17:52
本帖最后由 世界公民 于 2014-4-25 17:54 编辑

哥们,你用字符流读图片数据而且还是一行一行的读,你想一想,不出问题才怪呢,你调用读取一行的方法,他会把图片的数据按照查表发查到所对应的字符,直到查到换行符\r\n时才会把数据返回给你,但是因为你读的数据是图片所以是不大可能存在\r\n的字符的,也就是说不会返回数据的,然后就会出现各种莫名的异常。。。。要读写非文本数据,一定要使用字节输出输入流,而不要使用字符流。
作者: eternallove    时间: 2014-4-25 18:05
图片和多媒体文件都是二进制数据,应该用字节流进行读取,字符流本来就是专门设计的操作文本文件的流,如果用字符流操作图片和多媒体文件,它在解码的时候就会直接转为文本,当然会是乱码。
字符流是字节流的一种封装形式,只是对操作文本文件的简化提高效率,你这就相当于给自己挖个坑跳进去然后再想办法跳出来,自找麻烦。所以非常不建议这样玩。
作者: 你为谁归来    时间: 2014-4-25 18:19
字节流是通用的,字符流应用于文本文件的!




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