Java 字节流转字符流

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hlx20080808/article/details/86064760

    在java.io包中操作文件

      1>按流向分:输入流和输出流

      2>按处理数据分:字节流和字符流

           2.1 字节流:  InputStream,OutputStream 都是抽象类(处理字节或二进制对象)

           2.2 字符流:  Reader,Writer都是抽象类,(一个字符占两个字节)(处理字符或字符串)

      3>流的处理如下:

 File file =new File("test1.txt");
3.1>缓冲流 (小说)
FileWriter fw = new FileWriter(file);
PrintWriter pw = new PrintWriter(fw);

3.2>数据流(二进制流) 音频,视频,图片
FileInputStream fis=new FileInputStream(file);
DataInputStream  dis=new DataInputStream(fis);

3.3>对象流**
   序列化是将对象的状态写入到特定的流中的过程  (写)
   反序列化则是从特定的流中获取数据重新构建对象的过程 (读)
  FileInputStream fos = new FileInputStream(file);
  ObjectInputStream ois = new ObjectInputStream(fos);


注意:解决读取时中文乱码:
 (1)字符流+缓冲流==》不能解决
*(2)字节流转换成字符流+缓冲流==》解决
FileInputStream fis =new FileInputStream(file);
InputStreamReader reader=new InputStreamReader(fis,"gbk");
BufferedReader br=new BufferedReader(reader);)
 

读取时出现乱码问题:
 

java中提供了将字节流转为字符流的操作类,有也可以解决乱码问题:

public static void br2() {
        File file=new File("Intel.txt");
      
        try(
           //字节输入流对象
            FileInputStream fis =new FileInputStream(file);

         // 将字节输入流转化成字符输入流,并设置编码格式gbk,InputStreamReader为 Reader 的子类
            InputStreamReader reader=new InputStreamReader(fis,"gbk");

            //缓冲流对象
            BufferedReader br=new BufferedReader(reader);){

            System.out.println("读取当前文件编码:"+reader.getEncoding());

            String str="";
            //遍历读取
            while((str=br.readLine())!=null){
                System.out.println(str);
            }

        }catch (Exception ex){
            ex.printStackTrace();
        }
    }

效果:

猜你喜欢

转载自blog.csdn.net/hlx20080808/article/details/86064760