`
cq520
  • 浏览: 166228 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

你可能不知道的一些IO流基础

阅读更多

输入输出流想必大家已经用的非常熟练了,但是,我们往往忽略了身边最熟悉的一些东西,又或者我们只知道要这样做,却不知道为什么这么做,所以在这里跟大家分享一下在网络编程当中看到的一些关于I/O流的细节,闲话不多说,下面开始:

       OutputStream,顾名思义:输出流,它的子类使用所提供的方法向某种媒体写入数据,例如,FileOutputStream将数据写入文件,TelnetOutputStream将数据写入网络连接,不过听到这大家会问了,API中不存在TelnetOutputStream这个类呀,不过想必大家都记得,Sokcet类中有一个getOutputStream的方法,这个方法是获得连接对象的输出流,返回的是OutputStream,其本质更彻底的说应该是网络输出流,这是多态的威力,如果你知道怎么使用这些超类,你也就知道怎么使用所有这些子类。

       OutputStream中最基本的方法无疑就是write(int b)了,这里虽然传入了一个Int,但只接收0-255范围之内的整数,大家在DataOutputStream中想必还看到过一个writeByteint v)的方法,这个方法确保了一个Byte以一个Byte的形式写入数据,并且将数据追加到了缓冲区中。

说到缓冲区就不得不提一个flush方法,想必大家也都用过它,我们知道在OutputStream调用write方法的时候往往需要调用一个flush方法,简单的说是为了刷新缓冲区,强制输出数据,但是为什么要强制输出呢?举一个这样的例子:假设一台服务器与一台客户机之间正在进行通信,这个时候服务器在等待客户机的消息,如果客户机发送了300个字节的请求,但是默认缓冲区的大小是1024个字节,那么这个流的缓冲区就会等待更多的数据到来,而客户机以为自己的数据已经发出去了,自然会等待着服务器的响应,结果服务器那边由于缓冲区还没满,所以数据迟迟没有来到,结果就形成了一种死锁状态。所以我们经常会调用flush方法,不管你是否认为有必要刷新缓冲区,这都是很重要的,取决于你如何控制流的引用,你可能知道流被缓冲,也可能不知道(例如,不管你是否希望,System.out都是缓冲的),flush相对程序出错而言是一个低成本的操作,所以在需要刷新输出的时候不要忘了写上哦。

InputStream,输入流,其本质与输出流刚好形成对立的关系,用来从媒体中读取数据,最基本的方法是没有参数的read()方法,这个方法从输入流的源中读取一个字节数据,作为一个0255int返回,流的结束由返回-1结束,read()方法会等待并阻塞其后的任何代码的执行,知道有一个字节的数据可用。但是我们在写通信的时候却往往不能用-1表示数据的结束,因为我们永远不知道对方会在什么情况下真正结束通信,就像关闭连接一样,另外一方得告诉你什么在什么情况下他这句话已经说完了,这就涉及到通信协议了,下次再跟大家具体分析一下。

 

0
1
分享到:
评论

相关推荐

    java基础之IO流

    ### Java IO流基础知识点 #### 一、IO流概述 - **定义**:在Java中,IO流(Input/Output Streams)是用来处理输入输出的基本工具。流是一种有序的数据集合,通常涉及从源到目的地的数据传输过程。源可以是文件、...

    java基础 IO流

    java基础中的IO流是Java提供的一套用于文件读写操作的流式API,它包括字节流和字符流两种基本类型。字节流主要用在处理二进制数据,而字符流则是处理文本数据。 首先,文档中提到了`File`类,它是IO流操作中用于...

    javaIO流基础.zip_IO流 上传 下载文件_io流 上传_io流下载_下载

    在这个“javaIO流基础.zip”压缩包中,我们能看到一系列与文件上传和下载相关的Java代码示例,涵盖了多种IO流类型及其用法。 首先,`TestFileOutputStream.java`和`TestFileInputStream.java`涉及到的是文件输入流...

    Java-Io流,练习

    本练习旨在帮助初学者理解和掌握Java IO流的基础知识。 一、IO流的概念 IO流在Java中分为两大类:输入流(Input Stream)和输出流(Output Stream)。输入流用于从源(如文件、网络连接等)读取数据,而输出流则...

    Java基础篇:IO流.pdf

    Java IO流是Java编程语言中用于处理输入输出操作的一个重要概念。它允许程序读取数据源或向数据目的地写入数据。Java中的IO流主要分为输入流和输出流两大类,每类又可以根据数据处理方式的不同细分为多种具体实现。...

    IO流宝典.pdf

    总的来说,《IO流宝典》这本书将涵盖这些核心概念,并可能深入讲解IO流的高级特性和最佳实践,包括错误处理、性能优化、以及如何在实际项目中有效地使用Java IO流。对于任何希望提升Java I/O技能的开发者来说,这...

    IO流的主要流

    Java中的IO流主要负责在不同数据源之间进行数据的传输,包括从文件系统、网络、内存等地方读取数据,以及向这些地方写入数据。IO流被设计为双工通道,既可以进行输入操作,也可以进行输出操作。Java的IO流体系结构...

    Java-IO流基础例题 & 例题源码 & PPT教学文档(黑马程序员详细版).rar

    本资源包含的是Java-IO流的基础例题、源码及PPT教学文档,适合初学者和进阶者深入理解Java IO流的使用。 一、Java IO流概述 Java IO流分为字节流和字符流两大类,字节流处理的是8位的字节数据,而字符流处理的是16...

    java io流 案例

    总的来说,Java IO流是Java程序进行输入输出操作的基础,无论是读取配置文件、处理用户输入、还是与其他系统交换数据,都离不开IO流。通过深入学习和实践,开发者可以有效地管理和控制程序的数据流动,从而实现各种...

    Java IO流总结

    Java IO流还包含一些特殊的流,如ObjectInputStream和ObjectOutputStream,它们支持对象的序列化和反序列化,使得对象可以被保存到磁盘或在网络上传输。 总的来说,Java IO流是一个强大的工具集,它涵盖了各种数据...

    java之io流实例

    Java中的IO流是Java语言处理输入输出操作的重要组成部分,它为数据传输提供了强大的支持。本文将深入探讨Java的IO流实例应用,旨在帮助开发者更好地理解和掌握这一关键概念。 IO流在Java中分为两大类:字符流...

    Java IO流文档

    ### Java IO流详解 #### 一、Input和Output Stream概览 在Java中,输入输出流(简称IO流)是用来处理文件读写的核心技术之一。它主要包括两类:以字节为导向的流和以字符为导向的流。 ##### 1.1 以字节为导向的流...

    IO流的demo

    在IO流操作中,我们还需要了解一些关键概念: - **管道流(Piping Stream)**:允许流之间的连接,使得一个流的输出可以作为另一个流的输入。 - **转换流(Wrapper Stream)**:如Buffered开头的流,它们不改变数据...

    Java学生管理系统GUI+IO流

    Java学生管理系统GUI+IO流是一个适合初学者的项目,它主要展示了如何在没有数据库支持的情况下,利用Java的图形用户界面(GUI)和输入输出(IO)流来实现一个简易的学生和教师信息管理功能。这个系统可能包括账户...

    java中IO流例子

    Java中的IO流是Java平台提供的一种处理输入输出数据的核心机制,广泛应用于文件读写、网络通信、数据转换等场景。IO流分为字节流(Byte Stream)和字符流(Character Stream),它们构成了Java IO系统的基础。 1. *...

    C++ IO流 学习课件

    总之,C++的IO流是编程实践中不可或缺的一部分,熟练掌握其使用对于任何C++开发者来说都至关重要。通过深入学习和实践,初学者可以逐步提升自己的IO流操作技能,从而编写出更高效、更健壮的程序。

    586.584.JAVA基础教程_IO流-IO流的体系结构(586).rar

    Java中的IO流是进行输入/输出操作的核心机制,它允许程序与各种数据源(如文件、网络连接、内存缓冲区等)进行数据交换。在Java中,IO流被设计为一个层次化的体系结构,便于理解和使用。这个体系结构是根据流的方向...

    java零基础自学 之 JavaIO流处理

    Java IO流处理是Java编程中一个非常重要的概念,主要用于数据的输入和输出操作。对于Java初学者来说,理解和掌握IO流的基本使用至关重要。在Java中,流被形象地比喻为数据传输的通道,数据可以从一个源头(如文件、...

    java中的IO的基础教学(1)

    Java中的IO(输入/输出)系统...通过以上介绍,你应该对Java基础IO流有了初步了解。但要完全掌握IO系统,还需要进一步学习和实践,例如流的缓冲、转换、异常处理等。希望这个基础教学能帮助你更好地理解Java中的IO流。

    IO流三种流方式的文本文件的复制

    在Java编程语言中,IO流(Input/Output流)是用来处理数据输入与输出的重要工具。在文本文件的复制过程中,通常会用到三种主要的流类型:字节流(Byte Stream)、字符流(Character Stream)以及缓冲流(Buffered ...

Global site tag (gtag.js) - Google Analytics