A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谭荣强 高级黑马   /  2014-4-25 17:00  /  946 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

InputStreamReader可以和BufferedReader的组合,使用readLine()方法,读取字节流。能操作媒体文件吗(如图片等,我试了下,好像乱码),纯文本也用到它,难道它只能用在键盘录入上?

6 个回复

倒序浏览
求详细代码
回复 使用道具 举报

显示文件损坏
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();
                                }
                        }
                }
        }

}
回复 使用道具 举报
BufferedReader不是读取字符流的吗??对图片操作应该使用字节流
回复 使用道具 举报
本帖最后由 世界公民 于 2014-4-25 17:54 编辑

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