使用C++对java的classloader进行模拟
转自:使用C++对java的classloader进行模拟
一直以来,觉得java的classloader很不错的,做产品的话,可以将基本的做下来后,将扩展通过classloader的方式来做,将更新的补
丁使用classloader来做,在使用java的网络游戏中,可以将扩展通过classloader的机制,实现动态的更新,省的每次更新要重新下载
客户端,在手机上可是一个很不错的点子。
erlang也支持代码的热部署,java也可以动态更新,那么,C++呢,思来考去,没有想到类似非常完美的方案,只能知道一个基本成型的内容。
现在,不管是windows还是linux,都支持dll,我们可以动态的加载dll,是否可以像java那样,动态的调用函数呢?答案是可以的。需要借
助部分汇编来实现,要知道,我们可能只是知道一个函数的名字,函数参数的类型,参数的个数等等,都是不知道的。因为我更想做一个普遍使用的,而不是要告诉
你:“把某某的头文件给我”。
首先看外表的内容,java的ClassLoader的模拟接口:
ClassLoader.h
01
#ifndef _CLASSLOADER_H_
02
#define _CLASSLOADER_H_
03
#include "define.h"
04
#include "String.h"
05
class
ClassLoader
06
{
07
public
:
08
ClassLoader();
09
ClassLoader(ClassLoader* parent);
10
virtual
~ClassLoader();
11
void
load(
const
String& name);
12
void
* getFun(
const
String& name);
13
private
:
14
ClassLoader* parent;
15
void
* dl_handle;
16
};
17
#endif /* _CLASSLOADER_H_ */
接下来是ClassLoader.cpp
view source
print
?
01
#include "java/lang/ClassLoader.h"
02
#include < dlfcn.h >
03
#include "System.h"
04
ClassLoader::ClassLoader()
05
{
06
&nb
相关文档:
eclipse
菜单 -> Window -> Preferences, 打开Preferences窗口,然后依次选择 Java -> JadClipse,确保"Path to decompiler:"的值为"jad.exe"。
http://hi.baidu.com/darmn/blog/item/56678e7f14f81a0129388af7.html
http://hi.baidu.com/zhangge9477/blog/item/adeced08c9663a3ae8248849. ......
转自:
JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。本文将快速讲解 JSON 格式,并通过代码示例演示如何分别在客户端和服务器端进行 JSON 格式数据的处理。
Json必需的包
commons-httpclient-3.1.jar
commons-lang-2.4.jar
commons-l ......
总结一:
Java IO的一般使用原则:
一、按数据来源(去向)分类:
1、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter
2、是byte[]:ByteArrayInputStream, ByteArrayOutputStream
3、是Char[]: CharArrayReader, CharArrayWriter
4、是String: StringBufferInputStream, StringReader, StringW ......
package test;
import java.io.File;
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack ......
boolean java.lang.Object.equals(Object obj)
Indicates whether some other
object is "equal to" this one.
The equals method implements an
equivalence relation on non-null object references:
It is reflexive: for
any non-null reference value x, x.equals(x) should return true.
It ......