2.1--RandomAccessFile实现类的关联类FileChannel类图

DataInput接口的类图已经画出,尽管类图已经展示了与DataInputStream和RandomAccessFile这两个实现类有各种联系的元素。但是此时,我对这些元素一无所知,类图还不够详尽。于是附上类图并解读该类。

  • FileChannel类的外部联系

  该类是一个抽象类,它同时实现了三个接口:SeekableByteChannel、GatheringByteChannel、ScatteringByteChannel,即可见字节通道、聚集字节通道、离散字节通道。这三个接口来自NIO Package,“通道”一词比较形象,马上联想到读取和写入数据。如下图,这些接口规定了它们的实现类应该使用怎样的参数去实现读写任务。但是该抽象类,并没有真正的“实现”这些接口的操作,而只是复用了它们。这就意味着该抽象类应该是一个能够处理三种Byte数据的更一般的“通道”。于是它的实现类,任务就堪重了。

  该类还继承了另一个抽象类AbstractInterruptibleChannel(抽象中断通道),该子类没有对它的抽象父类进行重写,也没有对其抽象方法进行实现,只是复用了它。AbstractInterruptibleChannel(抽象的中断通道)类提供了这样几个方法:close、isopen、begin、implcloseChannel,其中implcloseChannel方法为抽象方法。

  这样一来,FileChannel类就是一个更通用的能够读写各种Byte数据和中断读写的通道。要使该类获得这样的能力,就应该增加一些类元素,使得它能够在面对任意的FIle时,自动转化为Byte数据,并根据Byte数据的不同调用不同的接口操作。这只是我的思路,源码中有它自己的实现,但是现在我并不是很关心,我只是想对它有个大概的了解,知道它是什么样子,用来做什么就足够了。

时间: 2024-12-27 04:26:02

2.1--RandomAccessFile实现类的关联类FileChannel类图的相关文章

2.2--RandomAccessFile实现类和它的关联类FileChannel

我认为分析源码是程序设计的一个逆过程,重要的是分析的过程,而且要时不时地换位思考,别人为什么要这样设计,多给自己敲敲边鼓,是提出问题的源泉,有了问题就不怕找不到答案.现在已经大体知道FileChannel类是什么和被约定用来做什么,接下来对RandomAccessFile和FileChannel之间的关系进行思考和探讨. DataInput接口的其一实现类RandomAccessFile,大致根据名字猜一下它是个什么"东西","随意进入文件",好像是这么个意思.随意

重要!!!实体类、数据访问类

创建两个类: users类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 实体类_数据访问类.App_Code { public class Users { private int _Ids; /// <summary> /// ids /// </summary> public int Ids { get { return _Ids;

C++ 类模板三(类模版中的static关键字)

//类模版中的static关键字 #include<iostream> using namespace std; /* 类模板本质上是c++编译器根据类型参数创建了不同的类, c++编译器在利用类模板生成类的时候会为每个类生成一个static变量 那么对于类中的static关键字就非常好理解了 static关键字修饰的变量是属于类的 同一个类的对象共享类的static静态变量 类模板中的static修饰的变量数据类型必须是确定的 不可以是类型参数 因为静态变量在类对象之前初始化 这时候还没有通

Java类的设计----Object 类

Object类 Object类是所有Java类的根父类如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类 public class Person { ... } 等价于: public class Person extends Object {. ... }例: method(Object obj){-}//可以接收任何类作为其参数 Object o=new Person; method(o); ==操作符与equals方法 ==操作符与equals方法的区别: =

C#派生类中使用基类protected成员的方法

我们知道C#中通过继承可以使一个具有公共数据和方法的基类被广泛应用从而减少代码量,这样派生类会具有基类中所有成员(除构造器等),我们理所当然可以通过派生类实例来使用基类的成员.那么当基类成员被protected修饰时,我们应该怎么在派生类中使用基类成员呢,下面将介绍使用方法. 首先我们贴一段错误的使用代码: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.ReadLine(); 6 7 } 8 } 9 pub

实体类、数据访问类中的属性拓展

类中: using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; namespace 实体类_数据访问类.App_Code { public class Users { SqlConnection conn = null; SqlCommand cmd = null; public Users() { conn = new S

Tkinter类之窗口部件类

Tkinter类之窗口部件类 Tkinter支持15个核心的窗口部件,这个15个核心窗口部件类列表如下: 窗口部件及说明: Button:一个简单的按钮,用来执行一个命令或别的操作. Canvas:组织图形.这个部件可以用来绘制图表和图,创建图形编辑器,实现定制窗口部件. Checkbutton:代表一个变量,它有两个不同的值.点击这个按钮将会在这两个值间切换. Entry:文本输入域. Frame:一个容器窗口部件.帧可以有边框和背景,当创建一个应用程序或dialog(对话)版面时,帧被用来组

类,抽象基类,接口类三者间的区别与联系(C++)

联系很明显,三个都是‘类’,如果读者对类的概念不清楚,可以参照wid的博文http://www.cnblogs.com/mr-wid/archive/2013/02/18/2916309.html. 下面着重解释一下区别,但此文仅是个人理解,如果觉得我说的不对的地方,还请赐教. (1)结构上的区别: 普通类:数据+方法+实现 抽象类:数据+方法(一定包含虚方法n>=1)+部分方法的实现 接口类:方法(纯虚方法) (2)概念上的区别: 普通的类和另外两个的区别很明显,普通类就是猫狗之类的,而抽象类

C# 类中隐藏基类方法和Partial

原文:C# 类中隐藏基类方法和Partial 今天对于.NET开发人员来说最开心的事情莫过于微软搞开源了,这觉得是给搞.NET开发的长脸.虽然我是一个初学者,这无疑给我极大的学习动力.Fighting!!! 当一个类从父类继承了一个成员时,也就继承了它的执行代码,如果成员时虚拟的,我们可以用override重写这段执行代码.但无论他是否是虚拟的,都可以通过new 关键字来隐藏它.例如: public class BaseClass { public void DoSomething() { //