`
smallsmile
  • 浏览: 134149 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通信理论总结【附图】

阅读更多

 

一、read与readfully

  1 readFully

 

public void readFully



(byte[] buf)
               throws IOException



    public void readFully (byte[] buf,
                      int off,
                      int len)
               throws IOException

 

 

 

2 read

public int read



()
         throws IOException



读取数据字节。如果不存在可用的输入,此方法将发生阻塞。 

 

public int read



(byte[] buf,
                int off,
                int len)
         throws IOException



读入 byte 数组。在某些输入可用之前,此方法将发生阻塞。考虑使用 java.io.DataInputStream.readFully 读取正确“长度”的字节。
Read函数最多能读取参数数组的长度个字节,而readfully是必须将参数数组读满才返回.

二、tcp/ip和udp

 

1、TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对
方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、
形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数
据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机
一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数
据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送
和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。 

2、UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接
,而是直接就把数据包发送过去! 
  UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机
之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,
如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据
包(如图2所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收
到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,
所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到
消息的情况。 

3、tcp协议和udp协议的差别 
TCP UDP 
是否连接 面向连接 面向非连接 
传输可靠性 可靠 不可靠 
应用场合 传输大量数据 少量数据 
速度 慢 快

 

三、EOF异常

   当输入过程中意外到达文件或流的末尾时,抛出此异常。
   此异常主要被数据输入流用来表明到达流的末尾。注意,其他许多输入操作返回一个特殊值表示到达流的末尾,而不是抛出异常。

   当文件或者流已经结束,但是程序缺还在阻塞的读取数据就会出现这种异常。

 

四、NIO

     http://smallsmile.iteye.com/admin/blogs/883221

五、http协议

六、订制TC/IP协议

 

七、监听模式

      1、模型简介:

       这种模型中,事件源,和对具体事件的处理,都是在独立的代码中,事件生产者,和处理者之间没有代码层的连结关系,这就是监听器这种设计模式带来的好处,改动一方的时候,不需要,也不会影响到另一方: 这是我们在类设计,系统设计中一直要追求的效果。这种设计模式依赖于接口实现, 接口充当了消息的生产者( 事件源) 和消息的处理者( 事件处理器) 之间连结的桥梁。

      2、实现方法

        第一、写一个通用的接口,定义一个每个组件都要实现的功能

        第二、将各个器件实现接口

        第三、写一个管理者的代码(线程),其中包含(1)第一步中实现的接口队列,(2)向组件发送消息的方法(3)注册组件的方法

        最后、在使用时,首先定义一个管理者对象M。 再定义需要的组件,定义后将其注册到M。

 

八、对象的几种关系

 

UML中的关系

1、 关联关系

关联关系连接元素和链接实例,它用连接两个模型元素的实线表示,在关联的两端可以标注关联双方的角色和多重性标记

 

2、 依赖关系

依赖关系描述一个元素对另一个元素的依附。依赖关系用源模型指向目标模型的带箭头的虚线表示。

 

3、 泛化关系

泛化关系也称为继承关系,泛化用一条带空心三角箭头的实线表示,从子类指向父类。

4、 实现关系

实现关系描述一个元素实现另一个元素

5、 聚合关系

聚合关系描述元素之间部分和整体的关系,即一个表示整体的模型元素可能由几个表示部分的模型元素聚合而成。即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

6. 组合
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

九、高内聚,低耦合

    1、高内聚,低耦合定义

    首先要知道一个软件是由多个子程序组装而成,而一个程序由多个模块(方法)构成!
    内聚就是指程序内的各个模块之间的关系紧密程度,耦合就是各个外部程序(子程序)之间的关系紧密程度。
    2、 为什么要高内聚?

    模块之间的关系越紧密,出错就越少!

    3、为什么要低耦合?

    子程序间的关系越复杂,就会产生更多的意想不到的错误!会给以后的维护工作带来很多麻烦。低耦合可以尽量的减少这种

    麻烦。一般来说,一个好的程序应该是星状的而不是网状的。

 

十、单实例模型

    1、模型简介

    单实例模型主要用于仅允许实现对象的一个对象的条件。如在与QQ好友聊天时,用户的主界面仅允许创建一次。

    2、实现方法

    在对应的类中

     (1)将构造器重写并私有化之,同时在类中要写一个static 的变量int count=0,一个私有属性:本类对象A a

     (2)写一个getInstance()的方法,在方法中判断是否count为0,若为0,则返回a,count++;否则返回null

 

 

十一、工厂设计模型

    1、模型简介

   工厂模型分为三类: 1. 简单工厂模式(Simple Factory) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。

   工厂模式有三个参与者,抽象产品(Product)、工厂(Creator)和具体产品(ConcreteProduct)。客户只会看到工厂和抽象产品 

     2、实现方法

   Prroduct :

public interface Product{ 
public String getName(); 
} 

  

     ConcreteProduct

public class ConcreteProduct implements Product{ 
public String getName(){ 
return "产品1"; 
} 
} 

 

     Creator

public class Creator{ 
public static Product create1(){ 
return new ConcreteProduct(); 
} 
} 


   工厂模式的作用在于将创建具体产品的方法由工厂类控制,客户只需要知道产品的抽象类型。

  • 大小: 26.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics