今天看了一下RMI的咚咚,明白了EJB中的stub和skelen到底时怎么回事.以前我一直把ejb中客户端的stub和服务器端的skelen看作是"代理",其实这是"想当然的"理解错误.stub和skelen有点类似,它是讲客户端所传递的参数通过stub放入网格中传人网络,当然不光是这样,stub还将一下网络信息(ip,JRMP协议的ASCII码等咚咚)压入其中,另外,为了忽略不同机器不同编码的问题,java采用了一种统一的网格形式.客户端不允许传送"引用",因为服务器中的地址跟客户端根本不是一回事.故此,要求class的参数必须序列化.
等到了服务器端,skelen的任务之一就是"解码"(姑且这么叫,你可以按照网络模型考虑).将主要的咚咚(传递的参数,及调用的类名,方法名)"翻译"出来.方法结束后,将结果"打包"成网格的形式发回客户端.为了节省网络资源,服务器端可以传递"引用"(因为服务器是固定的,它的指针也就固定).^_^,具体什么情况下传"引用"我也没有想到.
客户端的stub在"解码",得到相应的结果.
等到了服务器端,skelen的任务之一就是"解码"(姑且这么叫,你可以按照网络模型考虑).将主要的咚咚(传递的参数,及调用的类名,方法名)"翻译"出来.方法结束后,将结果"打包"成网格的形式发回客户端.为了节省网络资源,服务器端可以传递"引用"(因为服务器是固定的,它的指针也就固定).^_^,具体什么情况下传"引用"我也没有想到.
客户端的stub在"解码",得到相应的结果.
记得刚学java的时候,对流的理解很是让人恼怒,后来明白了流的概念之后,对于一个流的构造方法里面在new一个流感到莫名其妙.现在终于有点眉目,故此记录如下:
1.流的理解,
输入流--你可以把它看作是来源,即所要东西的源头.比如你想要得到一个文件里面的咚咚,那么初始化成输入流即可.
输出流--你可以把它看作是写字板(打个比方),比如你想在一个文件里面写入东西,那么初始化成输出流
2.流的嵌套使用--
先看看流的分类(我自己分的类命的名,^_^).a.基础流b.包装流.流的嵌套是这样用的 new 包装流(new 基础流).
ok,明白了没?最外层的是包装流,里面的是基础流(人喜欢打扮,流也不例外).当然,包装会有包装的好处,比如包装后的流可以调用包装流的方法,满足不同人的不同要求.
基础流:InputStream,ByteArrayInputStream,FileInputStream等等(包括对应的OutputStream)
包装流:FilterInputStream,BufferedInputStream,DataInputStream, LineNumberInputStream,PushbackInputStream以及有关的OutputStream.
#一个关于日期的简单例子(来自网络)
public static void main(String[] args) {
Date now = new Date();
1.流的理解,
输入流--你可以把它看作是来源,即所要东西的源头.比如你想要得到一个文件里面的咚咚,那么初始化成输入流即可.
输出流--你可以把它看作是写字板(打个比方),比如你想在一个文件里面写入东西,那么初始化成输出流
2.流的嵌套使用--
先看看流的分类(我自己分的类命的名,^_^).a.基础流b.包装流.流的嵌套是这样用的 new 包装流(new 基础流).
ok,明白了没?最外层的是包装流,里面的是基础流(人喜欢打扮,流也不例外).当然,包装会有包装的好处,比如包装后的流可以调用包装流的方法,满足不同人的不同要求.
基础流:InputStream,ByteArrayInputStream,FileInputStream等等(包括对应的OutputStream)
包装流:FilterInputStream,BufferedInputStream,DataInputStream, LineNumberInputStream,PushbackInputStream以及有关的OutputStream.
#一个关于日期的简单例子(来自网络)
public static void main(String[] args) {
Date now = new Date();
//DateFormat defaultFormat = DateFormat.getDateInstance();
//DateFormat shortFormat = DateFormat.getDateInstance(DateFormat.SHORT);
//DateFormat mediumFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
//DateFormat longFormat = DateFormat.getDateInstance(DateFormat.LONG);
//DateFormat fullFormat = DateFormat.getDateInstance(DateFormat.FULL);
DateFormat defaultFormat = DateFormat.getDateTimeInstance();
DateFormat shortFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT,Locale.CHINA);
DateFormat mediumFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM,Locale.CHINA);
DateFormat longFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,Locale.CHINA);
DateFormat fullFormat = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,Locale.CHINA);
//DateFormat shortFormat = DateFormat.getDateInstance(DateFormat.SHORT);
//DateFormat mediumFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
//DateFormat longFormat = DateFormat.getDateInstance(DateFormat.LONG);
//DateFormat fullFormat = DateFormat.getDateInstance(DateFormat.FULL);
DateFormat defaultFormat = DateFormat.getDateTimeInstance();
DateFormat shortFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT,Locale.CHINA);
DateFormat mediumFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM,Locale.CHINA);
DateFormat longFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,Locale.CHINA);
DateFormat fullFormat = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,Locale.CHINA);
String defaultDate = defaultFormat.format(now);
String shortDate = shortFormat.format(now);
String mediumDate = mediumFormat.format(now);
String longDate = longFormat.format(now);
String fullDate = fullFormat.format(now);
String shortDate = shortFormat.format(now);
String mediumDate = mediumFormat.format(now);
String longDate = longFormat.format(now);
String fullDate = fullFormat.format(now);
System.out.println("(Default) Today :" + defaultDate);
System.out.println("(SHORT) Today : " + shortDate);
System.out.println("(MEDIUM) Today :" + mediumDate);
System.out.println("(LONG) Today : " + longDate);
System.out.println("(FULL) Today : " + fullDate);
}
System.out.println("(SHORT) Today : " + shortDate);
System.out.println("(MEDIUM) Today :" + mediumDate);
System.out.println("(LONG) Today : " + longDate);
System.out.println("(FULL) Today : " + fullDate);
}
本文主要介绍Java相关知识。一是讲解EJB中stub和skelen的工作原理,客户端通过stub传递参数到网络,服务器端skelen解码,结果再打包返回;二是阐述流的概念,包括输入流和输出流,以及流的嵌套使用;最后给出一个日期格式化的简单例子。
614

被折叠的 条评论
为什么被折叠?



