输入输出流想必大家已经用的非常熟练了,但是,我们往往忽略了身边最熟悉的一些东西,又或者我们只知道要这样做,却不知道为什么这么做,所以在这里跟大家分享一下在网络编程当中看到的一些关于I/O流的细节,闲话不多说,下面开始:
OutputStream,顾名思义:输出流,它的子类使用所提供的方法向某种媒体写入数据,例如,FileOutputStream将数据写入文件,TelnetOutputStream将数据写入网络连接,不过听到这大家会问了,API中不存在TelnetOutputStream这个类呀,不过想必大家都记得,Sokcet类中有一个getOutputStream的方法,这个方法是获得连接对象的输出流,返回的是OutputStream,其本质更彻底的说应该是网络输出流,这是多态的威力,如果你知道怎么使用这些超类,你也就知道怎么使用所有这些子类。
OutputStream中最基本的方法无疑就是write(int b)了,这里虽然传入了一个Int,但只接收0-255范围之内的整数,大家在DataOutputStream中想必还看到过一个writeByte(int v)的方法,这个方法确保了一个Byte以一个Byte的形式写入数据,并且将数据追加到了缓冲区中。
说到缓冲区就不得不提一个flush方法,想必大家也都用过它,我们知道在OutputStream调用write方法的时候往往需要调用一个flush方法,简单的说是为了刷新缓冲区,强制输出数据,但是为什么要强制输出呢?举一个这样的例子:假设一台服务器与一台客户机之间正在进行通信,这个时候服务器在等待客户机的消息,如果客户机发送了300个字节的请求,但是默认缓冲区的大小是1024个字节,那么这个流的缓冲区就会等待更多的数据到来,而客户机以为自己的数据已经发出去了,自然会等待着服务器的响应,结果服务器那边由于缓冲区还没满,所以数据迟迟没有来到,结果就形成了一种死锁状态。所以我们经常会调用flush方法,不管你是否认为有必要刷新缓冲区,这都是很重要的,取决于你如何控制流的引用,你可能知道流被缓冲,也可能不知道(例如,不管你是否希望,System.out都是缓冲的),flush相对程序出错而言是一个低成本的操作,所以在需要刷新输出的时候不要忘了写上哦。
InputStream,输入流,其本质与输出流刚好形成对立的关系,用来从媒体中读取数据,最基本的方法是没有参数的read()方法,这个方法从输入流的源中读取一个字节数据,作为一个0到255的int返回,流的结束由返回-1结束,read()方法会等待并阻塞其后的任何代码的执行,知道有一个字节的数据可用。但是我们在写通信的时候却往往不能用-1表示数据的结束,因为我们永远不知道对方会在什么情况下真正结束通信,就像关闭连接一样,另外一方得告诉你什么在什么情况下他这句话已经说完了,这就涉及到通信协议了,下次再跟大家具体分析一下。
相关推荐
Java中的输入输出流是程序与外部数据交互的重要方式,它允许我们读取和写入数据到各种来源,如键盘、文件、网络等。在Java中,输入输出流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。本次实验...
计算机系统结构输入输出系统是指处理机与主存储器之外的部分统称为输入输出系统,包括输入输出设备、输入输出接口和输入输出软件等。实际上,运算器、控制器、主存储器和总线等也要通过输入输出系统来管理。 输入...
在西门子WinCC人机界面(HMI)系统中,为输入输出域添加单位是提升可视化界面专业性和用户友好性的重要步骤。标题提到的问题是关于如何在WinCC中让输入输出域显示带有单位的数据,例如温度显示时带上"℃"。描述中提供...
信息系统项目管理师九大管理44个过程输入输出工具列表,excel格式,已梳理成打印版本,直接可打印 信息系统项目管理师九大管理44个过程输入输出工具列表,excel格式,已梳理成打印版本,直接可打印 信息系统项目管理...
系统集成考试项目输入输出涉及到的是项目管理中的关键过程,主要涵盖了项目的启动、规划、执行、监控和收尾阶段。以下是这些过程的详细解释: 1. 制定项目章程:这是项目开始的标志,输入包括合同(如果有)、项目...
根据提供的文件信息,我们可以总结出以下关于Java中的输入输出处理的知识点: ### 1. Java标准输入输出 #### 1.1 标准输入输出概述 - 在Java中,标准输入输出是通过`java.lang.System`类实现的,其中`System.in`...
内容1:标准输入输出流重定向 (1) 新建一个工程demo1,设计一个类Time,成员变量为时(h)、分(m)、秒(s)。 (2) 分别为类Time重载提取运算符(>>)和插入运算符(>>)。 a. 输入格式:14 30 15 b. 输出格式:14.5042 (3) ...
本实验旨在帮助学生深入理解和熟练运用C++中的输入输出流,包括标准输入输出流和文件输入输出流。 首先,我们关注的是标准输入输出流。在C++中,`std::cin` 用于标准输入,通常是从键盘获取用户输入;而 `std::cout...
WinCC 输入输出域实现带确认的输入操作 在实际的项目应用中,某些关键数据的输入需要提示操作人员确认无误后才能进行。WinCC 输入输出域可以实现这种功能,本文将详细介绍如何使用 WinCC 的输入/输出域实现带确认的...
"C#输入输出重定向" C#输入输出重定向是指在程序设计中,可以将输入输出重定向到文件中,而不再是屏幕上。这种技术可以解决在设计程序时指定数据的输入来源和输出目的地的问题。 输入输出重定向的优点是可以在程序...
java java输入输出 java输入流 java输出流 java java输入输出 java输入流 java输出流 java java输入输出 java输入流 java输出流
"微机原理简单输入输出实验报告" 本实验报告主要是对微机原理简单输入输出实验的记录,涵盖了实验目的、实验内容、实验基本原理、实验接线图、主程序流程图、方案实现与测试等方面。下面是对实验报告的详细解读: ...
系统总线和具有基本输入输出功能的总线接口实验报告 一、实验报告概述 本实验报告是关于系统总线和具有基本输入输出功能的总线接口实验的报告。该实验的目的是理解总线的概念及其特性,并掌握控制总线的功能和应用...
[4页彩打]信息系统项目管理师九大管理44过程输入输出工具【完整口诀版】 [4页彩打]信息系统项目管理师九大管理44过程输入输出工具【完整口诀版】 [4页彩打]信息系统项目管理师九大管理44过程输入输出工具【完整口诀...
python中的输入输出;在Python中使用print()函数进行输出。 输出字符串时可用单引号或双引号括起来; 输出变量时,可不加引号; 变量与字符串同时输出或多个变量同时输出时,需用“,”隔开各项。;Python提供了input()...
在编程世界中,输入输出(Input/Output,简称I/O)是程序与用户交互的基础。Python作为一门易学且功能强大的编程语言,提供了简洁而直观的API来处理输入和输出。本篇将深入探讨Python中的输入输出操作,通过分析给定...
西门子触摸屏实现监控-PLC-所有输入输出IO程序下载 西门子触摸屏监控PLC所有输入输出IO信号状态是通过使用西门子触摸屏程序设置来实现的。该程序设置包括输入I点监控和输出Q点监控两部分。 在输入I点监控部分,...
单片机P1口输入输出实验 单片机P1口输入输出实验旨在让学生了解单片机P1口作为输入输出方式使用时,CPU对P1口操作方式。通过实验,学生可以了解单片机端口的设计和使用,掌握单片机P1口输入输出实验的硬件设计和...