- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在几种语言中,我们有能力使用输入/输出流来进行诸如从套接字读取或写入之类的事情,但是,物理流究竟是什么,如果使用文件流,它是如何连接到套接字或文件的?
我们大多数人都将流视为连接到文件或套接字的魔线,但到底是什么以及语言如何“连接到这样的结构以输入和输出数据?
谢谢大家!
最佳答案
流本身实际上只是一个固定大小的 FIFO字节队列,可能实现为 circular buffer .该队列的一侧是您的程序,它使用 fwrite()(或类似方法)将字节放入缓冲区,或者对于输入流,使用 fread() 等从缓冲区中删除字节。
队列的另一边是操作系统软件的某些部分;对于可能是文件系统层的文件;对于套接字,它将是 TCP 堆栈;对于标准输出,它可能是 tty 或伪 tty 驱动程序。在您的程序将一些字节写入流后,另一端的 OS 代码被唤醒,它从 FIFO 的另一端获取这些字节并对其进行适当的处理(例如将它们写入磁盘,或将它们放入 TCP 数据包并将该数据包发送到以太网卡,等等)
流的内部机制故意尽可能地对您隐藏,这样您的代码就不会依赖于流是如何实现的任何细节。这样,如果操作系统更改,或者您为不同的操作系统重新编译,您的代码(希望)不会中断并需要重写,因为您的代码从未做出任何可能不再正确的假设。
至于语言如何连接到这些操作系统机制,它与您可能使用的任何其他代码库实际上并没有太大区别——就像有人定义了您的代码使用的 fwrite()/fread() API,其他人定义了operating system API fread() 和 fwrite() 的实现者可以调用函数(好吧,实际上它们是 system calls ,但就我们的目的而言,它们类似于函数)。而该操作系统 API 又可以调用 device driver API内核用来与硬件通信的层,等等,对于使事情正常工作所需的尽可能多的层。
一路下来都是乌龟:)
关于file - 编程中流的底层原理是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22341101/
我正在尝试将资源/流设置为 Android 中的墙纸。我使用 WallpaperManager 类及其方法 setResource/setStream 来执行此操作。我通常在将图像设置为墙纸之前使用
我正在编写脚本来通过反复取消对象直到 EOF 来处理(非常大的)文件。我想对文件进行分区并让单独的进程(在云中)解开并处理单独的部分。 但是我的分区器并不智能,它不知道文件中 pickle 对象之间的
我正在实现图形表示。 Map>> g = new HashMap<>(); Graph 类中的一个方法是 List> getAllEdges() { List> allEdges = new
我正在通过 MediaCodec 处理实时流,并且有一个场景,其中 MediaFormat 在流中更改(即:正在解码的视频的分辨率发生更改)。鉴于我将解码器附加到 Surface 以在我检测到传入流的
嗨 iCoders 目前我正在开发一个使用 OpenTok/TokBox iOS SDK 进行直播的应用程序。我怀疑有多少订阅者可以订阅发布者发布的流。我在 openTok 论坛中搜索过这个但是没有找
我是一名优秀的程序员,十分优秀!