字节流和字符流

简介: 字节流和字符流

1.字节输入流:InputStream


  • 字节输入流的作用是从数据输入源(例如磁盘、网络等)获取字节数据到应用程序(内存)中;


读取字节

  • read 方法,每次可以读取一个字节的数据,提升为 int 类型,读取到文件末尾,返回 -1;
  // 1.创建一个字节输入流对象代表字节输入流管道与源文件接通
        InputStream is = new FileInputStream("D:\\code\\file-io-app\\file-io--app\\src\\hello.txt");
 
        // 2.开始读取文件中的字节数据,每次读取多个字节
        byte[]buffer1=new byte[5];
        int len1= is.read(buffer1);
        String rs1=  new String(buffer1);
        System.out.println(rs1);
 
 
 
        byte[] buffer = new byte[3];
        int len; // 记住每次读取了多少个字幕
        while ((len = is.read(buffer)) != -1){
            // 注意 :读取多少,倒出多少
            String rs=new String(buffer,0,len);// 读取字节数组,从0到len
            System.out.print(rs);
 
        }
        // 性能得到了明显的提升
        // 这种方案也不能避免读取汉字输出乱码的问题
 
        is.close();// 关闭流
 


2.字节输出流:OutputStream


  • 字节输出流的作用是将字节数据从应用程序(内存)中传送到输出目标,如外部设备、 网络等;
/* FileOutputStream (文件字节输出流)
        * 作用: 以内存为基准,把内存中的数据以字节的形式写到文件中去
        */
 
        // 创建一个字节输出流管道与目标文件接通
        // 覆盖管道
       // OutputStream os= new FileOutputStream("D:\\code\\file-io-app\\file-io--app\\src\\hello.txt");
 
        OutputStream os= new FileOutputStream("D:\\code\\file-io-app\\file-io--app\\src\\hello.txt",true);
        // 2.开始写字节数据出去了
        os.write(97);// 接一个字节
        os.write('b'); // b 98
      //  os.write('美');// [ooo] 默认只能写出去一个字节
 
        os.write("我爱你".getBytes());
 
        byte[]bytes="我爱你".getBytes();
        os.write(bytes,0,6); // 一个汉字三个字节
 
        // 换行
        os.write("\r\n".getBytes());// \n只在Windows系统  \r\n支持所有的
 
        os.close(); // 关闭流


3.字符输入流 FileReader


public class FileReaderTest1 {
    public static void main(String[] args) throws Exception {
 
        try ( // 1.创建一个文件字符流输出管道与源文件接通
                Reader fr=new FileReader("file-io--app\\src\\world"))
             {
               // 2.读取文本文件中的内容
//             int c; // * 记住每次读取的字符编号
//        while ((c= fr.read())!=-1){
//            System.out.print((char) c);
//        }
              // 3.每次读取多个字符
           char[]buffer=new char[3];
           int len;//记住读取到的字符数
           while ((len= fr.read(buffer))!=-1) {
               System.out.print(new String(buffer, 0, len));
           }
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
 
    }
}


4.字符输出流 FileWriter


public class FileWriterTest1 {
    public static void main(String[] args) throws IOException {
        // 字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效
        // 创建一个文件字符输出流管道
        try(Writer  fw= new FileWriter("file-io--app\\src\\world")) {
           // 输出字符流
            // 1.写一个字符
            fw.write('a');
             fw.write('w');
             fw.write('哈');
 
             // 2.写一个字符串
           fw.write("我爱你");
            fw.write("\r\n");
 
           // 3.写字符串中的一部分进去
            fw.write("我爱你中国",1,3);
            fw.write("\r\n");
 
           // 4. 写一个字符数组出去
            char[]buffer={'李','我','爱'};
            fw.write(buffer);
            fw.write("\r\n");
 
            // 5. 写一个字符数组中的一部分出去
            fw.write(buffer,0,1);
 
 
            fw.flush();
          // fw.close  关闭流,包括刷新流,但是关闭流之后,就不可以再加入数据
        } catch (IOException e) {
            e.printStackTrace();
        }
 
    }
}
目录
相关文章
|
26天前
|
存储 安全 Java
字节流和字符流有哪些区别
字节流和字符流是Java中两种基本的I/O流类型。字节流以8位字节为单位处理数据,适用于所有类型的文件;字符流以16位Unicode字符为单位,专为文本文件设计,自动完成字符编码转换,更适合文本处理。
46 2
|
26天前
|
存储 数据安全/隐私保护
如何选择使用字节流还是字符流
在处理文件或网络数据时,选择字节流(如InputStream/OutputStream)适合处理二进制数据,而字符流(如Reader/Writer)则适用于文本数据,能自动处理字符编码问题,确保文本正确读写。选择依据主要看数据类型及是否需要编码转换。
33 2
|
2月前
|
Java
字节流与字符流的差异
【10月更文挑战第13天】总的来说,字节流和字符流各有其特点和适用范围,我们需要根据具体的需求来选择使用哪种类型的流。在实际应用中,还需要注意编码问题、性能优化等方面,以确保数据的正确处理和高效传输。
|
3月前
|
移动开发 Java Linux
IO流:字节流
在Java编程中,IO流是一个核心概念,用于与文件、网络、内存等数据源交互。Java的IO库提供丰富的类和方法支持数据读写。IO流分为字节流和字符流,前者可操作所有类型文件,后者仅限纯文本文件。`FileOutputStream`用于向文件写入字节,支持多种写入方式,并可通过构造函数的布尔参数控制是否追加写入。`FileInputStream`则用于从文件读取字节,支持逐字节或批量读取。文件拷贝可通过结合读写操作实现,高效的方法是一次性读取并写入大容量数组。处理IO流时需注意异常管理,合理使用try-catch-finally结构确保资源正确释放。JDK7及以后版本提供了自动关闭资源的简化语法
57 10
|
4月前
|
存储 Java 索引
|
4月前
|
存储 移动开发 程序员
|
6月前
|
存储 Java 数据库
面试官:字节流可以处理一切文件为什么还需要字符流呢?
【6月更文挑战第8天】面试官:字节流可以处理一切文件为什么还需要字符流呢?
67 7
|
5月前
|
存储 缓存 Java
JavaSE—IO流之字符流与字节流
JavaSE—IO流之字符流与字节流
|
存储 Java
IO流之 字节流 & 字符流
大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等。在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象的表述为“流”,程序允许通过流的方式与输入输出设备进行数据传输。Java中的“流”都位于Java.io包中,称之为IO(输入输出)流。IO流即InputOutput的缩写。一切文件数据在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。httpshttps。...
202 0
字节、字符输入输出流
字节、字符输入输出流
59 0