- 博客(32)
- 资源 (11)
- 收藏
- 关注
原创 自己实现RMI(六)压缩与解压
当时在优化网络通信的时候,考虑到把序列化后的字符串压缩一下,体积减小,这样可能网络传输会快点。但是这个压缩过程比较耗时,而压缩解压带来的额外开销,和网络上直接传输体积稍微大的字符串,相比下来没什么优势(实际测试过了)。不过既然实践过了,还是留下一点痕迹吧。 // 压缩public static byte[] compress(String str) throws IOException
2012-08-28 21:00:08 2271
原创 自己实现RMI(五)socket通信方案之TCP通信
其实,我一开始的RMI的数据传输采用的就是普通的TCP通信方案,只是TCP比UDP效率稍微低点(UDP的方案比TCP的方案也没快多少~O(∩_∩)O~) TCP通信方案是可信的,只是实现的时候,收发时的数据最好是字符串,即接收端用readline函数接收字符串,这样的话效率高,如果用readbyte多次读取数据,效率低下。 其次,用TCP方案的话,不要用自带的s
2012-08-28 20:40:07 3238
原创 自己实现RMI(四)socket通信方案之UDP通信
虽然说UDP通信不可靠且没有连接状态,但是高效的传输效率还是非常诱人的。鉴于本人的项目环境是千兆以太网,考虑采用UDP通信来传输对象的序列化后的状态。原因有:以太网内传输UDP包基本上不会丢包,在程序设计时候可以不考虑该因素。此外,连接状态以及包乱序的问题,可以很方便的解决。下面具体讲述鄙人的简单方案。 基本原理是服务器端监听某端口,当有客户端发送请求,则新建线程为客户服务,线程
2012-08-28 17:54:23 4583
原创 自己实现RMI(三)对象序列化与反序列化
对象的序列化就是把对象的状态用字符串或者byte数组表示,以方便在网络上传输或者将数据写入文件。而反序列化即根据字符串或者byte数组欢迎对象的状态。一般常用的序列化方法是xml序列化,将对象的各个属性写入xml,然后用网络发送到远方,远方收到xml后创建一个空对象,最后根据xml的信息欢迎对象的状态。 当然用json来序列化要比xml要高效很多。但是,经过实验研究发现json还
2012-08-28 16:47:14 5249
原创 自己实现RMI(二)对象索引和方法回调
利用java中的map数据结构,可以很方便的实现对象的索引。此外,支持RMI的对象,必须支持序列化以及对象索引。序列化接口定义如下:public interface CommaSerialize { public abstract void toSerialize(CommaString writer);//序列化 public abstract void deSerialize(Com
2012-08-28 16:02:50 3340
原创 自己实现RMI(一)基本原理
RMI,即远程过程调用。在java中,利用RMI机制可以调用远程java虚拟机上面的对象,而且调用时跟调用本地对象一模一样。 虽然java类库里面有现成的RMI可以用,但是效率很低,基本上很难满足实际需要。至少,在一些要求快速调用远程对象的情况下,库里面的RMI基本上就是摆设。 参考RMI的基本原理,我自己实现了一套RMI方案。从原理上讲,实现过程是这样的:支持
2012-08-28 15:42:11 3012
原创 ONE源码阅读之输入模型和运动模型
输入模型: ONE仿真系统中,定时产生仿真消息的实现在MessageEventGenerator。首先,它是一个事件队列EventQueue(接口)。MessageEventGenerator通过实现nextEvent来产生一个事件MessageCreateEvent,同时产生一个随机时间n,直到过了n个嘀嗒后才产生下一个事件,这样的话,仿真器只需要在合适的时候调用nextEve
2012-08-28 12:07:51 2239
原创 ONE源码阅读之源码结构
借用ONE写了一个专利,过程中,仔细分析了ONE源码,并在其基础上写了不少代码,在这里做一下总结。 源码中,重要的包由core,gui,input,movement,report,routing,ui。其中,core是整个系统的核心实现源码;gui是GUI界面的实现;input是输入模块的实现,对于仿真系统来说,定时消息也是输入;movement是运动模型的实现;report是日
2012-08-28 11:50:46 4470
原创 等概率随机取样的c语言实现
问题:输入包含两个整数m和n,(m定理:从r个剩余元素中选择s个元素,那么下一个元素选中的概率位s/r。证明:当前一个数概率位s/r,那么s/r = (r-s)/r * s/(r-1) + s/r * (s-1)/(r-1).前一个项为前一个数未选中的情况,后一项为选中的情况。c语言实现:int r=n;int s=m;for(i=0;i{if(rand()% r
2012-08-27 16:20:14 6202
原创 中兴捧月大赛之经验教训总结(下)
经验教训:1.windows下定时器属于多线程范畴。具体情况没研究过,从网络上的资料和自己调试的直觉来说,定时器有专用的定时器线程来执行定时器回调函数,所以使用定时器必须考虑到线程同步互斥问题。2.能避免多线程尽量避免多线程,当然,有一个辅助的线程也是允许的。一般情况下,如果一个好的设计能够避免使用线程,那么这个项目优势就大大的存在,至少稳定性就非常好,而且调试方便。3.不要因为项目简
2012-08-17 11:26:36 5632
原创 中兴捧月大赛之经验教训总结(上)
参加这个比赛的过程中,自己也摸索和学习了很多新的知识,特别是网络编程这块,以前学得太简单,这次到了前所未有的学习深度。这里一并总结一下。技术要点:1.C语言实现简单数据结构。 由于大赛要求必须在c环境下,而且不允许用第三方库,所以必须在编码实现方案之前,实现一些可能用到的数据结构,包括双链表,map。1.1 简单双链表的实现。 我这里参考了linux
2012-08-17 11:19:58 5441 1
原创 中兴捧月大赛之方案探讨
昨天参加完中兴捧月的决赛,感觉特别的糟糕。说实话,感觉中兴这次比赛搞得真的很奇葩!一是比赛搞得让我觉得公司对整个比赛的态度有点随意,有点不正式。二是比赛的赛题要求每天都在变,感觉不天天关注活动交流区,就容易违规一样~真奇葩!。三是比赛的通知。收到了进入决赛的邮件通知,看完后真的没懂要做些什么要准备些什么。直到到了中兴的研究所现场才发现,我擦,居然是视频答辩~邮件里面和电话里面怎么不说清楚呢?再者,
2012-08-17 10:47:54 4297
转载 负荷分担的可靠性系统仿真(中兴捧月任务四赛题)
任务描述:一、 标题负荷分担的可靠性系统仿真二、 题目在无线通信系统中,无论是运营商或者设备商对系统的可靠性、可用性都极其关注。请设计一套考虑负荷分担的可靠性仿真系统。如图1所示,总控节点(System Controller Node)负责用户接入,通过一定的分配规则分配相应的负荷节点(Payload Node)为其服务,总控节点本身不涉及用户具体的服务。负荷节
2012-08-16 11:49:09 4471
原创 发现!java的定时器可以并行执行
没有好好分析java定时器的实现过程,不过最近项目上发现,多个定时器同时操作一个list的时候,会出现dirty数据~但是如果改成vector就没事了。改天好好分析分析java定时器的实现原理。
2012-06-07 17:12:33 3083 1
转载 java Socket用法详解
在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器, 服务器与客户端都通过 Socket 来收发数据.这篇文章首先介绍Socket类的各个构造方法, 以及成员方法的用法, 接着介绍 Socket的一些选项的作用, 这些选项可控制客户建立与服务器的
2012-04-26 21:23:54 85701 7
转载 Java socket中isClose()和isConnected()
可以引起网络连接关闭的情况有以下4种:1. 直接调用Socket类的close方法。2. 只要Socket类的InputStream和OutputStream有一个关闭,网络连接自动关闭(必须通过调用InputStream和OutputStream的 close方法关闭流,才能使网络可爱接自动关闭)。3. 在程序退出时网络连接自动关闭。4. 将Socket对象设为null或
2012-04-26 16:20:35 24607 1
原创 C++内存布局
今天闲来无事,研究起C++的内存布局来。得到几个结论,记录一下。参考文献:http://haoel.blog.51cto.com/313033/124567(参考文献里面涉及的东西,这里都不再罗嗦。这里对文献做一点点补充。) 先看看几个类的实现。class Base{public : virtual void f() { cout<<"Base:f()"<<e
2012-01-09 18:02:56 2252 2
原创 爱上修改源码-----修改libgd源码有感
最近做的PDF阅读器被boss骂了一顿,说是“架构失败!”。不过也是,能够把更多的逻辑放到NDK里面就应该放嘛~ 于是乎,开始忙着移植GD库。首选的是libgd,因为这个库很轻很适合在嵌入式设备上跑。但是今天忙了一天,才把一个png图片显示在android模拟器上,不是因为这个库很难懂,也不是因为libgd需要和libpng才能显示png图片,而是因为透明度的问题。
2011-11-28 22:05:37 2481
原创 关于android 3.0系统的内存限制的一些测试数据
最近给android系统的内存限制问题折腾的蛋疼,网上说android的一个activity只有16M内存,有的说java申请的空间和c中申请的空间总和是16M,我汗啊~ 我得显示20M的bitmap图片。。。。。 以下是个人测试数据,供参考: 1.系统:android 3.0 2.用如下方式获取到app的内存总量是48M。
2011-11-24 22:50:56 3017
原创 android下PDF格式的地图数据的显示------超大PDF页面显示策略(二)
下面简要介绍一下项目中的一些经验。技术总结:1.缓存系统缓存系统的原理很简单。这里就不具体介绍。public class Cache { CacheData[] cachePool=null; int size=10; public Cache(int dataSize) { size=dataSize; cachePool=new CacheData[size
2011-11-15 22:02:55 3564 1
原创 android下PDF格式的地图数据的显示------超大PDF页面显示策略(一)
这两周,忙着做一个“PDF阅读器”。不过这个PDF阅读器不是一般的阅读器,他要求打开的PDF是超大页面的矢量PDF。说得直接点,PDF存储的是地图数据,我做一个地图显示界面。注意:这个PDF只有一页!这个项目的难点在于,在嵌入式系统上实时绘制和渲染超大PDF页面。要显示的PDF是一个8M矢量数据的地图。显示,一次性将PDF渲染出来是不现实的,除非你愿意等20秒钟然后才看到地图。项目方案:(
2011-11-15 19:58:25 2199
原创 Android NDK中C和java之间数组的传送
最近在android上开发一个PDF阅读器,需要将NDK的数据传送到java中显示。值得注意的是,NDK中用c的内存分配函数分配的内存空间,不能直接return给java中使用。 反正坚持一个原则:C分配的内存只能C来使用,java分配的内存只可以java使用。至于C和java之间的内存交换,NDK提供了额外的函数。 下面举例说明:一个java中分配int[],然
2011-11-07 12:13:10 9430
原创 IO完成端口入门级详细注释代码
#include "StdAfx.h"#include "MyServer.h"#include #pragma comment(lib, "Ws2_32.lib")//windows socket库typedef struct __ARG{ HANDLE hCom
2011-09-25 19:48:32 1233 1
原创 XPDF源码调试过程中字体问题的解决办法
A. 'Adobe-GB1'缺失问题1.下载简体中文字库ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-simplified.tar.gz2.解压成/usr/xpdf/xpdf-chinese-simplified
2011-07-30 11:41:18 3083 1
原创 纯C环境下实现标准函数的覆盖
最近在实现一个虚拟文件系统,简单的说就是为客户提供一套fopen,fread这样的一套函数,客户在编译的时候,如果定义了一个宏OS_EXIST,即由操作系统来提供文件系统,这样的话直接调用c标准的文件操作函数。如果没有定义OS_EXIST,则客户调用的fopen这套函数由另外一套
2011-07-23 17:00:18 1143
原创 自己动手写php web server
最近在做一个web缓存系统,作为一个web缓存系统,肯定得有一个web服务器的功能,即实现简单的http协议。于是,干脆自己动手写一个php的web server。(注明:本文的源码,可以在本人的资源分享里面下载)在此之前,先介绍一下简单http协议。协议包含两个重要内容。 Request格式:HTTP请求行 (请求)头 空行 可选的消息体典型例子: GET /index.php HTTP/1.1 /r/nHost: 192.168.2.166 /r/nAccept: text/
2011-05-17 20:49:00 7148 2
原创 为rm命令增加回收站功能
<br /> rm是个强大的命令,特别是rm -rf有时候强大到让你欲哭无泪,当你想清除当前目录下的所有文件和目录时,很简单<br />$sudo rm -rf ./*<br />这没什么,但是,但是如果不小心打成这样<br />$sudo rm -rf /*<br />兄弟,请节哀!<br />还有其他各种各样的杯具,比如打开了很多窗口,有本地机器还有远程的几台服务器,本来想从这台机器执行rm -rf命令,却错误的输入到了其他机器的终端窗口,总之rm太危险了,特别是带有-rf参数时一定要慎之又慎,但
2011-05-12 14:43:00 2413 1
原创 如何选择STL容器?
大家知道,c++的STL标准库很好用,里面的vector,list,deque,stack,slist,set,map,都很好用。但是,在实际编程过程中,如何根据自己的项目需求选择里面的一种容器呢? 最好的办法就是了解其中的原理,然后做选择。(补充,如果项目中不考虑效率,就不用考虑那么多了~毕竟STL从头到尾都考虑了效率问题。)vectorvector的基本原理如下:它采用线性空间存储数据。如果空间不够,则另外分配新的两倍大小的空间,然后把旧空间释放掉。可以看出:①vector不适合pu
2011-05-05 17:24:00 2086
原创 用windows批处理实现批量增量改名
<br /> 给你100个txt,怎么把她们的名字改成0.txt,1.txt,2.txt.....99.txt呢?<br /> 貌似是一个很简单的改名字过程,但是如果数量比较大的话,就不能手工改名了。<br /> 下面是用window批处理批量改名的代码:<br /> @echo off&setlocal EnableDelayedExpansion <br /> set a=1 <br /> for /f "delims=" %%i in ('dir /b *.tx
2011-03-31 10:24:00 4924
原创 用模板和基类巧妙实现类方法的回调(消息映射的基本原理)
<br />注:本文参考一位学长的博客。用模板和基类巧妙实现类方法的回调是在这位学长的指导下完成的。他的博文链接:<br />http://xuwenzhang.org/blog/category/c%e7%bc%96%e7%a8%8b%e6%8a%80%e6%9c%af/<br /> <br /> 主要的任务:<br /> 实现对象方法的回调。(静态函数或者全局函数的回调,这个很好实现,就不多说了)。这个技巧,常见于消息映射的实现。形象的说,A对象有一个方法show(),但是B在没有A对象指针
2011-03-22 17:48:00 1167
原创 自由输入法学习之二----自由输入法的安装
<br /> 上篇文章讲了如何编译自由输入法。现在讲讲如何安装以及安装过程输入法都干了什么。<br /> 安装方法:<br /> A .运行register.exe,注册输入法。实际上是在注册表里面填充<br /> HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Keyboard Layouts<br /> HKEY_LOCAL_MACHINE/Software/freepy。<br /> 对于Keyboard
2011-03-08 10:53:00 1054
原创 自由输入法学习之一------xp环境下用vc6.0编译自由输入法
最近要做一个windows的输入法,以便为另外一个项目做准备。于是开始研究起windows的输入法------自由输入法。 但是在网上找到的很多源码,都是不带工程的,不管是vs2008的工程还是vc6.0的工程,一个都没找到。后来我自己弄了一个带vc6.0的工程的自由输入法,传到cdsn上共享起来。希望后来者能少走一些弯路吧。 下载的源码的目录结构说明: 1.binary。作者编译好的,可以直接安装的自由拼音输入法。 2.imm.编译时需要用到的头文件和静态库。 3.t
2011-03-08 10:38:00 1887
android NDK中c和java大数据交换
2011-11-07
自由输入法2.2(含vc6.0工程xp环境下调试成功)
2011-03-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人