Java 序列化

Posted by & filed under Uncategorized.

简介: 如果你只知道实现 Serializable 接口的对象,可以序列化为本地文件。那你最好再阅读该篇文章,文章对序列化进行了更深一步的讨论,用实际的例子代码讲述了序列化的高级认识,包括父类序列 化的问题、静态变量问题、transient 关键字的影响、序列化 ID 问题。在笔者实际开发过程中,就多次遇到序列化的问题,在该文章中也会与读者分享。 引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写。然而在有些情况下,光知道这些还远远不够,文章列举了笔者遇到的一些真实情境,它们与 Read more […]

struts2显示国际化页面

Posted by & filed under Uncategorized.

1,properties文件   中文文件名:messageResource_zh_CN.properties   [java] view plaincopy message.welcome =  \u5317\u4EAC\u5965\u8FD0\u6B22\u8FCE\u4F60 {0} 英文文件名:messageResource_en_US.properties   message.welcome = Welcome come to beijing Olympic Games {0} 2,struts配置文件:struts.xml   [html] view plaincopy <struts><!– 根节点 –>     <constant name=”struts.custom.i18n.resources” value=”messageResource”></constant> </struts>   3,jsp页面   [html] view plaincopy <%@ page language=”java” import=”java.util.*” pageEncoding=”UTF-8″%> <%@ taglib prefix=”s” uri=”/struts-tags”%> <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”> <html>   <head>     <title></title>   </head>   <body>     <s:text name=”message.welcome”>         <s:param>xiaoqiang</s:param>     </s:text>   </body> </html> Read more […]

文件上传[Uploadify]

Posted by & filed under Uncategorized.

Uploadify文件上传插件 Uploadify简单说来,是基于Jquery的一款文件上传插件。它的功能特色总结如下: 支持单文件或多文件上传,可控制并发上传的文件数 在服务器端支持各种语言与之配合使用,诸如PHP,.NET,Java…… 通过参数可配置上传文件类型及大小限制 通过参数可配置是否选择文件后自动上传 易于扩展,可控制每一步骤的回调函数(onSelect, onCancel……) 通过接口参数和CSS控制外观 http://www.uploadify.com/demos/ 案例:http://demo.swfupload.org/v220/index.htm 代码截图:   [javascript] view plaincopy <script type=”text/javascript”>         var swfu;         window.onload = function () {             swfu = new SWFUpload({                 // Backend Settings                 upload_url: “upload.php”,                 post_params: {“PHPSESSID”: “4a5922ll546csgthmlpmogbvo7”},                 // File Upload Settings                 file_size_limit : “2 MB”,   // 2MB                 file_types : “*.jpg”,                 file_types_description : “JPG Images”,                 file_upload_limit : “0”,                 // Event Handler Settings – these functions as defined in Handlers.js                 //  The handlers are not part of SWFUpload but are part of my website and control how                 //  my website reacts to the SWFUpload events.                 file_queue_error_handler : fileQueueError,                 file_dialog_complete_handler : fileDialogComplete,                 upload_progress_handler : uploadProgress,                 upload_error_handler : uploadError,                 upload_success_handler : uploadSuccess,                 upload_complete_handler : uploadComplete,                 // Button Settings                 button_image_url : “images/SmallSpyGlassWithTransperancy_17x18.png”,                 button_placeholder_id : “spanButtonPlaceholder”,                 button_width: 180,                 button_height: 18,                 button_text : ‘<span class=”button”>Select Images <span class=”buttonSmall”>(2 MB Max)</span></span>’,                 button_text_style : ‘.button { font-family: Helvetica, Arial, sans-serif; font-size: 12pt; } .buttonSmall { font-size: 10pt; }’,                 button_text_top_padding: 0,                 button_text_left_padding: 18,                 button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,                 button_cursor: SWFUpload.CURSOR.HAND,                 // Flash Settings                 flash_url : “../swfupload/swfupload.swf”,                 custom_settings : {                     upload_target : “divFileProgressContainer”                 },                 // Debug Settings                 debug: false             });         };     </script> Read more […]

解读30个提高Web程序执行效率的好经验(转)

Posted by & filed under Uncategorized.

其实微博是个好东西,关注一些技术博主之后,你不用再逛好多论坛了,因为一些很好的文章微博会告诉你,最近看到酷勤网推荐的一篇文章《30个提高Web程序执行效率的好经验》,文章写得不错,提到一些经验都比较实用,是我们每一个做前端开发的人员都必须知道的。本人逐条解读一下,个人意见可能比较浅薄,看看大家对各个经验点怎么看了。 1、尽量避免使用DOM。当需要反复使用DOM时,先把对DOM的引用存到JavaScript本地变量里再使用。创建页面元素的时候尽量不要使用DOM的document.createElement/appendChild()方法来创建,换用设置innerHTML的方法来替换。 jiuye: 过多使用DOM会增加DOM树的规模,进而影响文档遍历以及查找元素的性能。如果使用DOM元素的使用,建议使用如下方法进行:   [javascript] view Read more […]

(转)CloudStack如何添加或测试API

Posted by & filed under Uncategorized.

CloudStack4.0里API做了不少调整, 这些不影响CloudStack API的易用性. 我们仍然很容易添加新的API或对现有的API进行测试.本文将试着从下列几点对CloudStack 4.0做些探讨, 欢迎大家给出见解或评论: 1. CloudStack的所有API 2. 如何测试CLoudStack API功能 3. 如何添加新的API到CloudStack 1. CloudStack的所有API CloudStack根据不同的帐户等级对于API的访问权限有不同的限制.账户分为管理员,域管理员,用户等. 管理员是所有的API都可以调用,用户API则受限,是管理员API的一个子集, 如果你只是想了解CloudStack支持的API,可以访问: http://incubator.apache.org/cloudstack/docs/api/index.html即可, 在安装好CloudStack管理服务器节点后,也可以在如下配置文件找到系统支持的所有API及对应权限: /etc/cloud/management/*commands*.properties CloudStack自身的API定义都可以在commands.properties和commands-ext.properties里找到, Read more […]

CloudStack 在Windows 平台上的开发环境设置

Posted by & filed under Uncategorized.

CloudStack 在Windows 平台上的开发环境设置 注意:   1 所在的Windows 平台要求能连上网, 编译,安装时,需要上网上线下载。   2 安装或解压的软件目录,不要带空格 1 安装 Cygwin Cygwin 为windows提供一个像unix的bash shell。 安装Cygwin, 你需要下载并运行其setup[http://cygwin.com/setup.exe]安装,   * 安将选项 将下载,缓存和安装你选择的包   * 默认选择的包是不够的,因为 开发 和 公共的编辑器 在默认选择下是没有被包含的     ** 在 “Develop”的下面,只选择git 安装 或者 选择整个 “Develop”安装都是可以的,但是     后者比较简单,需要花费更多的安装时间     ** 在”Editors”的下面,选择vim 或者 emacs 依赖你所使用的在 Read more […]

(转)Linux守护进程的编程实现

Posted by & filed under Uncategorized.

Linux 守护进程的编程方法 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,造成不同Unix环境下守护进程的编程规则并不一致。这需要读者注意,照搬某些书上的规则(特别是BSD4.3和低版本的System V)到Linux会出现错误的。下面将全面介绍Linux下守护进程的编程要点并给出详细实例。 一. Read more […]

(转)Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量

Posted by & filed under Uncategorized.

  使线程同步 在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进行。 如果不采取适当的措施,其他线程往往会在线程处理任务结束前就去访问处理结果,这就很有可能得到有关处理结果的错误了解。例如,多个线程同时访问同一个全局变量,如果都是读取操作,则不会出现问题。如果一个线程负责改变此变量的值,而其他线程负责同时读取变量内容,则不能保证读取到的数据是经过写线程修改后的。 为了确保读线程读取到的是经过修改的变量,就必须在向变量写入数据时禁止其他线程对其的任何访问,直至赋值过程结束后再解除对其他线程的访问限制。象这种保证线程能了解其他线程任务处理结束后的处理结果而采取的保护措施即为线程同步。 线程同步是一个非常大的话题,包括方方面面的内容。从大的方面讲,线程的同步可分用户模式的线程同步和内核对象的线程同步两大类。用户模式中线程的同步方法主要有原子访问和临界区等方法。其特点是同步速度特别快,适合于对线程运行速度有严格要求的场合。 内核对象的线程同步则主要由事件、等待定时器、信号量以及信号灯等内核对象构成。由于这种同步机制使用了内核对象,使用时必须将线程从用户模式切换到内核模式,而这种转换一般要耗费近千个CPU周期,因此同步速度较慢,但在适用性上却要远优于用户模式的线程同步方式。 临界区   临界区(Critical Read more […]

(转)c++ stdio与iostream对比

Posted by & filed under Uncategorized.

  C++ iostream 的主要作用是让初学者有一个方便的命令行输入输出试验环境,在真实的项目中很少用到 iostream,因此不必把精力花在深究 iostream 的格式化与 manipulator。iostream 的设计初衷是提供一个可扩展的类型安全的 IO 机制,但是后来莫名其妙地加入了 locale 和 facet 等累赘。其整个设计复杂不堪,多重+虚拟继承的结构也很巴洛克,性能方面几无亮点。iostream 在实际项目中的用处非常有限,为此投入过多学习精力实在不值。 stdio 格式化输入输出的缺点 1. 对编程初学者不友好 看看下面这段简单的输入输出代码。

注意到其中 输入和输出用的格式字符串不一样。输入 short Read more […]

(转)POSIX线程库条件变量的使用——Pthreads线程库实例笔记4

Posted by & filed under Uncategorized.

条件变量(Condition Variables) 条件变量是什么? 条件变量为我们提供了另一种线程间同步的方法,然而,互斥量是通过控制线程访问数据来实现同步,条件变量允许线程同步是基于实际数据的值。 如果没有条件变量,程序员需要让线程不断地轮询,以检查是否满足条件。由于线程处在一个不间断的忙碌状态,所以这是相当耗资源的。条件变量就是这么一个不需要轮询就可以解决这个问题的方法。 条件变量总是跟互斥锁(mutex lock)一起使用。 下面是使用条件变量的比较典型的过程: 主线程 声明并初始化需要同步的全局数据或变量(例如”count“) 声明并初始化一个条件变量对象 声明并初始化一个与条件变量关联的互斥量 创建线程A和B并开始运行 线程A 线程运转至某一个条件被触发(例如,”count“必须达到某个值) 锁定相关联的互斥量并检查全局变量的值 调用pthread_con_wait()阻塞线程等待线程B的信号。请注意,调用pthread_con_wait()以自动的原子方式(atomically)解锁相关联的互斥量,以便于可以被线程B使用。 当收到信号时,唤醒线程。互斥量被以自动的原子方式被锁定。 明确的解锁互斥量。 继续 Thread Read more […]