java类结构图_Java I/O常用的类结构图

今天读了《Thinking in Java》中的I/O流的章节,整理了下关于I/O流常用的一些类,类图如下:

e8331448127729cad97eeb8ca862bd62.png

常用的类大概就是这些,接下来简单的说下这些类的作用,关键的类我会加上代码的实例:

一、先说Java1.0的InputStream和outputStream

这两个类不多说,就是抽象父类。

1、FileInputStream和FileOutputSteam

文件的写入和读出,主要结合BufferedInputStream和BufferedOutputStream使用。

2、ByteArrayInputStream和ByteArrayOutputSteam

主要是对字节数组进行的操作下面是一个实例,结合DataInputStream的使用

packagecom.example.io.demo.readerTest;import java.io.*;/*** @Author: caesar

* @Date:2021年01月13日 20:01:03

* @Description:*/

public classTest4 {public static void main(String[] args) throwsIOException {

DataInputStream dataInputStream= new DataInputStream(new BufferedInputStream(new ByteArrayInputStream("This is a dog!!!".getBytes())));while (dataInputStream.available() != 0){

System.out.println((char)dataInputStream.readByte());

}

dataInputStream.close();

}

}

3、StringBufferInputSream已经弃用

4、PipedInputSteam和PipedOutputSteam

主要用于两个线程之间来传递数据,尽量不要使用单个线程来操作管道流,容易出现死锁。

packagecom.example.io.demo.writetest;importjava.io.IOException;importjava.io.PipedInputStream;importjava.io.PipedOutputStream;/*** @Author: caesar

* @Date:2021年01月14日 09:01:38

* @Description: 管道流

* 官方说明不建议使用单个线程,可能会死锁。所以在实际开发过程中要注意尽量不要写在单个线程中。

*

* 另外在jdk1.1中还出现了另外两个管道流:PipedReader和PipedWriter

*

* 这两个流是用来传递字符的。在使用范围上只能传递文本文件。不能用来传递多媒体文件。

* 如果单线程操作,会出现死锁的情况,也就是notifyAll()和wait()循环执行*/

public classTest4 {static class Receiver implementsRunnable {privatePipedInputStream pipedInputStream;publicReceiver() {this.pipedInputStream = newPipedInputStream();

}publicPipedInputStream getPipedInputStream() {returnpipedInputStream;

}

@Overridepublic voidrun() {byte[] b = new byte[1024];intlength;try{while ((length = pipedInputStream.read(b)) != -1) {

System.out.println(new String(b,0,b.length));

}

}catch(IOException io) {

System.out.println(io.getMessage());

}

}

}static class Send implementsRunnable {privatePipedOutputStream pipedOutputStream;publicSend() {

pipedOutputStream= newPipedOutputStream();

}publicPipedOutputStream getPipedOutputStream() {returnpipedOutputStream;

}

String s= "This is a luck dog!!!";

@Overridepublic voidrun() {try{

pipedOutputStream.write(s.getBytes());

}catch(IOException e) {

e.printStackTrace();

}

}

}public static void main(String[] args) throwsIOException {

Send send= newSend();

Receiver receiver= newReceiver();//连接管道流

send.getPipedOutputStream().connect(receiver.getPipedInputStream());//开启线程

newThread(send).start();newThread(receiver).start();

}

}

5、BufferedInputStream和BufferedOutputSteam

主要是缓冲流,先写道缓冲区,可以提升读取和写入的速度,使用广泛,作为装饰者类,可以配合其他的类进行使用

6、DataInputSteam和DataOutputSteam

平台编码不一致的问题,但是必须按照数据存放的位置,来进行读取。。。

packagecom.example.io.demo.writetest;import java.io.*;/*** @Author: caesar

* @Date:2021年01月14日 09:01:20

* @Description: 平台编码不一致的问题,但是必须按照数据存放的位置,来进行读取。。。*/

public classTest3 {//数据的存储和恢复

public static void main(String[] args) throwsIOException {

DataOutputStream dataOutputStream= new DataOutputStream(new BufferedOutputStream(new FileOutputStream("G://Test/test.txt")));

dataOutputStream.writeDouble(3.1415926);

dataOutputStream.writeUTF("This is a good boy!!!");

dataOutputStream.writeDouble(1.23456789);

dataOutputStream.writeUTF("This is a dog!!!");

dataOutputStream.close();

DataInputStream dataInputStream= new DataInputStream(new BufferedInputStream(new FileInputStream("G://Test/test.txt")));

System.out.println(dataInputStream.readDouble());

System.out.println(dataInputStream.readUTF());

System.out.println(dataInputStream.readDouble());

System.out.println(dataInputStream.readUTF());

}

}

二、Java1.1的Reader和Writer

其他的和上面的类都有对应,我说一下特有的,比如说

1、StringReader、StringWriter和PrintWriter(其实也有PrintSteam,在此也说一下)

StringReader和StringWriter就是字符串的读取和写入,PrintWriter可以在写入时候,添加内容。

packagecom.example.io.demo.writetest;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.PrintWriter;importjava.io.StringReader;/*** @Author: caesar

* @Date:2021年01月13日 21:01:09

* @Description: PrintWriter简单实现*/

public classTest2 {public static void main(String[] args) throwsIOException {

BufferedReader bufferedReader= new BufferedReader(new StringReader("This is a cat!!!"));

PrintWriter printWriter= new PrintWriter("G://Test/test2.txt");int line = 1;

String s;while ((s = bufferedReader.readLine()) != null){

printWriter.println("第" + (line++) + "行:"+s);

}

printWriter.close();

bufferedReader.close();

}

}

补充:

标准I/O

System.in:没有被包装过的InputStream

System.out、System.err:被PrintStream包装过的OutputStream

InputStreamReder,outputStream转换流:

Scanner中就有System.in的转换流,转化为了Reader,PrintStream中也有转化流转化为了Writer

来看一个我们自己使用的转化流,其实和Scanner类似,只不过,咱可以判断,输入的为空就跳出:

packagecom.example.io.demo.writetest;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.util.Scanner;/*** @Author: caesar

* @Date:2021年01月14日 16:01:25

* @Description: 转换流的使用*/

public classTest5 {public static voidmain(String[] args) {

BufferedReader bufferedReader= new BufferedReader(newInputStreamReader(System.in));

String s;try{while ((s = bufferedReader.readLine()) != null && s.length() != 0) {

System.out.println(s);

}

}catch(IOException io) {

System.out.println(io.getMessage());

}try{

bufferedReader.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

合规批量下载美国上市公司年报数据的一些经验和总结 本文总结了使用Python脚本批量下载和处理美国上市公司SEC报告的技术经验。通过CIK代码查询SEC EDGAR系统,生成特定日期和报告类型的URL,并使用Selenium和Requests库下载报告内容。流程包括数据获取、文件下载、Excel处理和多线程优化,确保高效处理几百条数据。关键技术挑战包括SEC访问限制、动态网页内容和数据完整性,解决方案包括设置合规的User-Agent、使用Selenium模拟浏览器行为以及错误日志记录。最佳实践包括模块化设计、多线程优化和严格遵守SEC合规性。该自动化流程 阅读详情

相关推荐

Java中的五种I/O模型详解

输入/输出(I/O)是计算机程序与外部环境(如文件、网络等)进行交互的方式。Java语言提供了多种I/O模型,帮助开发者处理数据读写和通信。本文将深入探讨Java中的五种I/O模型:阻塞I/O、非阻塞I/O、选择器I/O、NIO(New I/O)以及异步I/O,分析它们的工作原理、优缺点和适用场景,以帮助读者全面理解Java的I/O处理机制。

fudaihb的博客 1474

类结构表示方式介绍:类图(Class Diagram)

类图(Class Diagram): 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。   类一般由三部分组成: 类名(Class):每个类都必须有一个名字,类名是一个字符串。  属性(Attributes):属性是指类的性质,即类的成员变量。类可以有任意多个属性,也可以没有属性。   UML中:可见性 名称:类型 [= 默认值] 操作(Operations):操作是类的任意一个实例对象都可以使用的行为,操作是类的成员...

qq_45545968的博客 6503

RK3588芯片USB OTG模式切换:Device到Host的驱动奥秘之旅

摘要:本文详细介绍了RK3588芯片USB OTG模式从Device到Host的完整驱动流程,包括硬件电路设计、内核驱动配置、模式切换机制及验证方法。RK3588芯片凭借强大的性能和灵活的USB OTG特性,在工业控制、智能家居等领域具有广泛应用前景。文章重点分析了Type-C接口设计、USBPHY芯片选型、Linux内核模块配置等关键技术要点,并提供了模式切换脚本使用方法和常见问题解决方案,为开发者实现RK3588 USB OTG功能提供了全面指导。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 672

UML 类图

类图 类图展示了面向对象系统的构造模块。描绘了模型或部分模型的静态视图,显示它包含的属性和行为,而不是详细描述操作的功能或完善方法。类图最常用来表达多个类和接口之间的关系。泛化(Generalizations),聚合(aggregations)和关联(associations)分别是类之间继承,复合或应用,及连接的表现。 下面的图显示了类之间的聚合关系。弱聚合(浅色箭头)表现在类 ...

weixin_30273763的博客 688

UML九种标准图详解

UML九种标准图详解

深圳市多克创新科技有限公司 2万+

多表操作

多表操作 多表关系介绍 一对一 一对多(多对一) 多对多 一对多关系实现 在多的一方建立外键,指向一的一方的主键。 多对多关系实现 多对多关系需要借助第三张中间表。中间表至少包含两个字段,作为第三张表的外键,分别指向两张表的主键。 一对一关系实现 一对一关系实现可以再在任一方添加唯一外键连接另一方的主键 ...

sjwl0526的博客 413

java类关系图_类图和对象图

类图的概念一、概述类图(Class Diagram)是描述类、接口、协作以及它们之间关系的图,用来显示系统中各个类的静态结构。类图是定义其他图的基础,在类图基础上,可以使用状态图、协作图、组件图和配置图等进一步描述系统其他方面的特性。类图包括7个元素:类(Class)、接口(Interface)、协作(collaboration)、依赖关系(Dependency)、泛化关系(Generalizat...

weixin_42110533的博客 3248

Java I/O总结——Writer

前一篇幅我们总结了Reader,Writer与Reader几乎是“心心相印”的,此外Writer提供的方法和OutputStream提供的几乎是一样的,不同之处在于Writer的操作多数是char类型的,类结构如下图所示: 对比前面的Reader的类结构图,相信大家看得会更清楚。在这里我一直想说的是:Java I/O在使用的时候很容易混淆,给大家看个表,如下: ...

weixin_33853827的博客 190

Java I/O总结——InputStream

http://www.moandroid.com/?p=1435Java I/O总结——InputStream By: 海市蜃楼 | In: Android开发 22 十一 2009 在前面介绍了Decorator(装饰)模式, 让我自己想起了刚开始工作时那段“痛并快乐”的学习时光。在学习Android网络方面,也发现网络方面的很多内容都与Java I/O有关,因此暂时先停下An...

weixin_34268610的博客 88

Java I/O模型的演变:从阻塞I/O到异步I/O的底层机制解析

以上代码示例展示了各种I/O模型的基本用法,从阻塞I/O的简单粗暴,到异步I/O的高效并发,每种模型都有其适用的场景。理解这些模型的底层机制,可以帮助我们根据实际需求选择合适的I/O模型,编写出高性能、高并发的Java应用程序。I/O模型的演进是为了解决并发问题,选择哪种模型取决于具体场景。阻塞I/O简单但并发低,非阻塞I/O解决了阻塞但消耗CPU,I/O多路复用提高并发,异步I/O实现了真正的高效并发。

weixin_41455464的博客 1488

什么是I/O?

计算机有输入设备(键盘等)和输出设备(显示屏等),(网卡和硬盘既可以作为输入也可以作为输出)。所以从计算机结构角度来看,I/O描述的是。为了保证操作系统的安全性和稳定性,一个进程的地址空间被分为和。我们平时的应用程序都是运行在用户空间,而像等都是需要依赖内核空间来完成的。而我们要执行I/O操作时,由于我们没有权限,所以只有,让操作系统来帮我们完成。而我们一般开发常见的就是。所以从应用程序来看,I/O是指我们的应用程序,将我们需要的数据从内核空间拷贝到用户空间。

m0_51808048的博客 6707

Java I/O 流(Input/Output Stream)

I/O 流(Input/Output Stream)是 Java 中用于处理输入/输出的核心机制,提供了读写数据(字节或字符)的统一抽象。

huing的博客 2078

Java的I/O演进之路

一、I/O 基础入门 Java1.4之前的早期版本,对I/O的支持并不完善,开发人员在开发java高性能IO程序的时候,会面临一些巨大的挑战和困难,主要问题如下: 没有数据缓存区,IO性能存在问题 没有C或者C++的Channel概念,只有输入、输出流 同步阻塞式I/O通信(BIO),通常会让通讯线程长时间的阻塞服务端的响应 支持的字符集有限,硬件可移植性不好 在Java支持异步通讯之前的很长一段时间里,一直都是C/C++长期占据着高性能服务端程序开发的语言,Java的同步阻塞式I/O一直被人们锁所诟病

csdn5215的博客 8007

Java的I/O历史

Java的I/O历史

AiFlutter的博客 1236

30 张Java 的思维导图,全面梳理构建 Java 的知识体系分享

这份思维导图包含从Java的简介、主要特性、发展历史到语法、数据类型、修饰符、运算符、类、数组、框架、面向对象的编程思想等大大小小的知识点。小编这几天在网上收集了 30 张大佬制作的 Java 知识点总结的思维导图,整理成了这篇文章分享给大家,帮助大家梳理构建 Java 的知识体系。10、Java 基本数据类型 A Java思维导图。5、Java基础语法 Java思维导图。30、Java 新特性 Java思维导图。1、Java 简介 Java思维导图。15、Java 运算符 B。

weixin_49889351的博客 1748

[架构之路-214]- UML-类图图解、详解、结构化、本质化讲解

类是面向对象语言的程序设计中的概念,是面向对象编程的基础。类的实质是一种引用数据类型,类似于 byte、short、intchar)、longfloat、double 等基本数据类型,不同的是它是一种复杂的数据类型。因为它的本质是数据类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。结构化面向对象简单数据类型复合数据类型struct ABC;//结构体类型class ABC;//类类型组成结构体成员变量结构体成员函数(新增加)类成员变量。

文火冰糖(王文兵)的博客 6921

UML从专家到小白

视问题域而定,例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是。这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是。整体与部分是不可分的,部分也不能给其它整体共享,作为整体的对象负责部分的对象的生命周期。的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的。

Rainbow 504

类结构的表示方式:类图(Class Diagram)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34255055的博客 921

java 程序写出三个类,triangle,lader,circle(简单易懂)

编写一个Java应用程序,该程序中有三个类:Triangle、Trapezoid和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。具体要求如下: 1.Triangle类具有类型为double的三个边,以及周长、面积属性,Triangle类具有返回周长、面积以及修改三个边的功能。此外,Triangle类还有一个boolean型的属性,该属性用来判断三个数能够构成一个三角形。完成上述操作后,给Triangle再增加3个方法,分别用来返回3个边sideA, sideB, sideC的值。 2.Land.

weixin_45894818的博客 1万+

UML 图-类图简介

类图(Class diagram)是模型的静态结构,展示了模型中类、类的内部结构以及与其他类的关联关系。

MichaelZ的博客 945

六自由度并联Stewart摇摆平台计算

六自由度并联Stewart摇摆平台计算1、Matlab计算程序。2、姿态逆解计算。3、Matlab GUI界面操作和显示,可以动画模拟仿真等运行。4、程序源码有注释。

上一篇: java中int转换double类型_java中int ,float ,double,String,Interget等数据类型的相互转换
下一篇: java重载概念_详细讲解JAVA中方法重载概念——简单易懂
VS华
博客等级 码龄8年 32粉丝 73原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值