Java核心学习 —— IO

整个Java IO体系都是基于字符流(InputStream/OutputStream) 和 字节流(Reader/Writer)作为基类,根据不同的数据载体或功能派生出来的。

一、同步、异步、阻塞、非阻塞

1.1 同步与异步

同步和异步关注的是通讯方式。

同步:需要等所有操作完成后,返回结果。
异步:不需要等所有操作完成,返回结果。

1.2 阻塞与非阻塞

阻塞与非阻塞关注的是等待状态。

1.3 例子

例子1:电水壶烧水

同步阻塞:水壶烧水,人要一直等在水壶旁边,直到水烧开。
同步非阻塞:水壶烧水,人去做其他事,时不时过来看看,水烧没烧开,直到水烧开。
异步阻塞:水壶有烧水报警、自动断电功能,人打开烧水开关后,还是等在水壶旁边,等水烧开(虽然没必要)。
异步非阻塞:水壶有烧水报警、自动断电功能,人打开烧水开关后,去干其他事,不用一直等水壶烧开。

例子2:家电商场买电视

同步阻塞:买电视,坐在商场干等着,等商家包装电视,自己带回去。
异步非阻塞:买电视,下订单,下完电视订单订单,付完款,去干其他事,直到快递上门送货。

例子3:书店买书

打电话给书店问有没有《围城》这本书。
同步:打电话给书店老板,老板说你等等,我查一下,然后一直等,直到老板说有没有。
异步:打电话给书店老板,老板说,等我查到了,打电话给你。
阻塞:上述的同步或异步过程,你也一直在等老板的回答。
非阻塞:上述的同步或异步过程,你去干其他事。

参考文档

同步、异步、阻塞、非阻塞

原文地址:https://www.cnblogs.com/fonxian/p/10890076.html

时间: 2024-10-15 18:30:29

Java核心学习 —— IO的相关文章

java核心学习笔记(一) javaJDK目录阐述

本系列博客为原创博客,旨在学习整理之用,转载请注明出处,谢谢. java作为最成功的语言之一,有很多地方可以学习,不仅仅是语言的用法. 本次学习目标在于系统的从javaSE学起,学习java的理念思想,以及从代码层次直接学习javaSE和他的用法,以此来为将来学习java类库的编写.java开发框架以及javaEE.java虚拟机.javaWEB打下良好的基础,努力让编程成为一种思想,成为身体的一部分. 这次从头重新对java的学习,目的是要学习java的世界观和方法论,学习过程要符合哲学理论,

java核心学习(十八) javaNIO框架---“块”模型的IO

一.java新IO概述 javaIO中的输入流和输出流都是通过字节的移动来处理的,面向流的输入输出系统一次只能处理一个字节,因此效率不高,而且传统的输入输出流是阻塞试的,也就是说当无法读到数据时,当前线程会被阻塞直到读取到有效数据才会继续运行. java1.4之后提供了一系列改进的输入输出类与方法,并且以NIO为基础改写了java.io包中的类,新增了满足NIO的功能. NIO采用内存映射文件的方式,java.nio中主要的包有: java.nio ,主要包含于Buffer相关的类: java.

java核心学习(十七) IO框架---对象序列化

一.使用对象流实现序列化. 先定义一个可序列化的对象 package com.shy.IO; import java.io.Serializable; public class Person implements Serializable{ public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } publ

java核心学习(九) java基础类库之Scanner

从第九节开始,对java的基础类库进行初步学习,这些基础类其中的一些内容是java程序员的基本功 言归正传,开始学习.对于java类库的具体使用方法,可以在IDE里面查看源码和注释,也可以在官方网站查看文档,本学习只是简单过一边重点,并不会面面俱到. Scanner顾名思义就是一个扫描器,可以从文件.输入流.字符串解析数据. 在new Scanner时可以使用不同的构造器参数来创建不同数据源的Scanner,如Scanner sc = new Scanner(System.in)就是对标准输入流

JAVA基础学习---IO流总结

Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作.   IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表. 字节流和字符流

java 核心编程——IO流之字符流(三)

1.字符流 1.1 所有文件的存储都是字节的存储,我们日常在磁盘上保存的其实并不是文件的字符,而是先把字符转换成字节,再把这些字节储存到磁盘.在读取文件时,也是一个字节一个字节的读取,然后生成字节的序列. 1.2 字节流可以处理任何对象,但是字符流呢,.只用来处理字符或者字符串.可以这样说,字节流呢,提供了最基本IO功能,可以处理任何IO操作,但是有一点,不可以直接处理Unicode字符,为什么呢,因为Unicode字符是一个单元为2个字节的字符,而字节流的处理单元为1个字节,字符流是由Java

java核心学习(二十一) 多线程---创建启动线程的三种方式

本节开始java多线程编程的学习,对于操作系统.进程.线程的基本概念不再赘述,只是了解java对于多线程编程的支持有哪些. 一.继承Thread类来创建线程 java语言中使用Thread类来代表线程,代表线程的类可以通过继承Thread类并重写run()方法来实现多线程开发,调用线程类实例的start方法来启动该线程.下面来试一试 package ThreadTest; public class FirstThread extends Thread{ private int i; public

java 核心编程——IO流之字符流和字节流相互转换(四)

1.为什么字符流和字节流需要转换? 这是因为有一些时候系统给你提供的只有字节流,比如说System.in标准输入流.就是字节流.你想从他那里得到用户在键盘上的输入,只能是以转换流将它转换为Reader以方便自己的程序读取输入.再比如说Socket里的getInputStream()很明显只给你提供字节流,你要不行直接用,就得给他套个InputStreamReader()用来读取.网络传输来的字符. 2.字节流和字符流怎么转换? 2.1.字节流转换为字符流:InputStreamReader 2.

java 基础学习 IO流 学习总结

File类概述和构造方法: File类的概述 文件和目录路径名的抽象表示形式  构造方法 public File(String pathname) public File(String parent,String child) public File(File parent,String child) 创建功能 public boolean createNewFile() public boolean mkdir() public boolean mkdirs() 删除功能 public boo