关于标准IO流的一些认识

C语言库中有一个FILE的结构体,当我们打开一个文件的时候,会用到FILE*类型的指针来操作fopen所返回的一个指针,这个指针就是流。

流是操作系统管理IO的一个引入的概念,一个流是与一个描述符绑定在一起的。所以也可以根据流来得到一个描述符。

标准IO库有三种类型的缓冲:1、全缓冲 2、行缓冲 3、无缓冲。全缓冲是指,当一个操作一个流的时候,如果打算往流里写进去一些信息,那么如果这是全缓冲的流,它会先把信息写在它的缓冲里面,直到信息结束满或者缓冲区空间已满的时候,才会触发IO写操作。

例如,当我们需要往一个stdout标准输出写入一些信息的时候,那么全缓冲的stdout会把你想写的信息先缓存在它的缓冲区里面,这样的话,只有等你把要写的信息写完整了、或缓冲区空间不够用了的情况下,操作系统才会为我们执行真正的IO写操作。也就是才会把信息给写到输出,而并不是你写一个字符的信息,操作系统就帮我们执行一个IO的写操作,这样的话明显浪费资源。反之,stdin也是一样。

接着是一个行缓冲,跟全缓冲差不多的概念,但是这个行缓冲会在stdout遇到一个'/n'即回车符号的时候,就执行写操作。

无缓冲,stdout收到一个字符写一个字符,不过实际上很少情况下会真正这样做,因为还受到一个硬件的限制,有的硬件会有缓存的操作,这个是程序级别难以控制的。

fgets这个函数每次只能获得一行的信息。而一般在交互的设备中,stdin跟stdout默认是全缓冲的。stderr是无缓冲的流、

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以和你讨论关于Java中File类、二进制标准输入输出的相关知识。 首先,File类是Java中用于表示文件和目录路径的类。它提供了一系列方法,可以对文件和目录进行操作,比如创建、删除、重命名、获取大小、获取路径等等。使用File类可以方便地对文件和目录进行管理。 其次,二进制是Java中用于处理二进制数据的,主要包括InputStream和OutputStream两个抽象类。InputStream用于从输入源读取二进制数据,OutputStream用于向输出目的地写入二进制数据。二进制可以处理任意类型的二进制数据,比如图片、音频、视频等等。 最后,标准输入输出是Java中用于与控制台进行交互的,主要包括System.in和System.out两个静态变量。System.in表示标准输入,用于从控制台读取数据;System.out表示标准输出,用于向控制台输出数据。通过标准输入输出,我们可以方便地与用户进行交互,接收用户输入的数据,输出程序执行结果等等。 关于如何使用File类和二进制类,可以通过如下代码进行演示: ```java import java.io.*; public class FileDemo { public static void main(String[] args) { // 创建一个File对象,表示要读取的文件 File file = new File("test.txt"); try { // 创建一个FileInputStream对象,用于读取文件 FileInputStream fis = new FileInputStream(file); // 创建一个byte数组,用于存储读取到的数据 byte[] buffer = new byte[1024]; // 读取数据到buffer中 int len = fis.read(buffer); // 输出读取到的数据 System.out.println(new String(buffer, 0, len)); // 关闭输入 fis.close(); } catch (IOException e) { e.printStackTrace(); } // 创建一个File对象,表示要写入的文件 File file2 = new File("test2.txt"); try { // 创建一个FileOutputStream对象,用于写入文件 FileOutputStream fos = new FileOutputStream(file2); // 创建一个byte数组,用于存储要写入的数据 byte[] data = "Hello World!".getBytes(); // 写入数据到文件中 fos.write(data); // 关闭输出 fos.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 以上代码使用FileInputStream和FileOutputStream分别读取和写入文件中的数据。 关于如何使用标准输入输出,可以通过如下代码进行演示: ```java import java.io.*; public class StdioDemo { public static void main(String[] args) { // 从标准输入读取数据 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { System.out.print("请输入你的名字:"); String name = br.readLine(); System.out.print("请输入你的年龄:"); int age = Integer.parseInt(br.readLine()); System.out.println("你的名字是:" + name); System.out.println("你的年龄是:" + age); } catch (IOException e) { e.printStackTrace(); } // 向标准输出输出数据 System.out.println("Hello World!"); } } ``` 以上代码使用BufferedReader从标准输入中读取数据,使用System.out向标准输出中输出数据。 希望以上内容能够帮助到你理解File类、二进制标准输入输出的相关知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值