- 浏览: 2467076 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
Externalization没用过, 它通过牺牲默认序列化的灵活性来获得高性能. 在某些场景下可以采用这种方式, 这里是一个例子:
这里是序列化的处理:
这里是反序列化的处理:
package com.javacodegeeks.test; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.Arrays; import java.util.Date; import java.util.List; public class Employee implements Externalizable { private String firstName; private String lastName; private String socialSecurityNumber; private String department; private String position; private Date hireDate; private Double salary; private Employee supervisor; private List<string> phoneNumbers; public Employee() { } public Employee(String firstName, String lastName, String socialSecurityNumber, String department, String position, Date hireDate, Double salary) { this.firstName = firstName; this.lastName = lastName; this.socialSecurityNumber = socialSecurityNumber; this.department = department; this.position = position; this.hireDate = hireDate; this.salary = salary; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getSocialSecurityNumber() { return socialSecurityNumber; } public void setSocialSecurityNumber(String socialSecurityNumber) { this.socialSecurityNumber = socialSecurityNumber; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public Date getHireDate() { return hireDate; } public void setHireDate(Date hireDate) { this.hireDate = hireDate; } public Double getSalary() { return salary; } public void setSalary(Double salary) { this.salary = salary; } public Employee getSupervisor() { return supervisor; } public void setSupervisor(Employee supervisor) { this.supervisor = supervisor; } public List<string> getPhoneNumbers() { return phoneNumbers; } public void setPhoneNumbers(List<string> phoneNumbers) { this.phoneNumbers = phoneNumbers; } public void readExternal(ObjectInput objectInput) throws IOException, ClassNotFoundException { this.firstName = objectInput.readUTF(); this.lastName = objectInput.readUTF(); this.socialSecurityNumber = objectInput.readUTF(); this.department = objectInput.readUTF(); this.position = objectInput.readUTF(); this.hireDate = new Date(objectInput.readLong()); this.salary = objectInput.readDouble(); int attributeCount = objectInput.read(); byte[] attributes = new byte[attributeCount]; objectInput.readFully(attributes); for (int i = 0; i < attributeCount; i++) { byte attribute = attributes[i]; switch (attribute) { case (byte) 0: this.supervisor = (Employee) objectInput.readObject(); break; case (byte) 1: this.phoneNumbers = Arrays.asList(objectInput.readUTF().split(";")); break; } } } public void writeExternal(ObjectOutput objectOutput) throws IOException { objectOutput.writeUTF(firstName); objectOutput.writeUTF(lastName); objectOutput.writeUTF(socialSecurityNumber); objectOutput.writeUTF(department); objectOutput.writeUTF(position); objectOutput.writeLong(hireDate.getTime()); objectOutput.writeDouble(salary); byte[] attributeFlags = new byte[2]; int attributeCount = 0; if (supervisor != null) { attributeFlags[0] = (byte) 1; attributeCount++; } if (phoneNumbers != null && !phoneNumbers.isEmpty()) { attributeFlags[1] = (byte) 1; attributeCount++; } objectOutput.write(attributeCount); byte[] attributes = new byte[attributeCount]; int j = attributeCount; for (int i = 0; i < 2; i++) if (attributeFlags[i] == (byte) 1) { j--; attributes[j] = (byte) i; } objectOutput.write(attributes); for (int i = 0; i < attributeCount; i++) { byte attribute = attributes[i]; switch (attribute) { case (byte) 0: objectOutput.writeObject(supervisor); break; case (byte) 1: StringBuilder rowPhoneNumbers = new StringBuilder(); for(int k = 0; k < phoneNumbers.size(); k++) rowPhoneNumbers.append(phoneNumbers.get(k) + ";"); rowPhoneNumbers.deleteCharAt(rowPhoneNumbers.lastIndexOf(";")); objectOutput.writeUTF(rowPhoneNumbers.toString()); break; } } } }
这里是序列化的处理:
public static byte[][] serializeObject(Externalizable object) throws Exception { ByteArrayOutputStream baos = null; ObjectOutputStream oos = null; byte[][] res = new byte[2][]; try { baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); object.writeExternal(oos); oos.flush(); res[0] = object.getClass().getName().getBytes(); res[1] = baos.toByteArray(); } catch (Exception ex) { throw ex; } finally { try { if(oos != null) oos.close(); } catch (Exception e) { e.printStackTrace(); } } return res; }
这里是反序列化的处理:
public static Externalizable deserializeObject(byte[][] rowObject) throws Exception { ObjectInputStream ois = null; String objectClassName = null; Externalizable res = null; try { objectClassName = new String(rowObject[0]); byte[] objectBytes = rowObject[1]; ois = new ObjectInputStream(new ByteArrayInputStream(objectBytes)); Class objectClass = Class.forName(objectClassName); res = (Externalizable) objectClass.newInstance(); res.readExternal(ois); } catch (Exception ex) { throw ex; } finally { try { if(ois != null) ois.close(); } catch (Exception e) { e.printStackTrace(); } } return res; }
发表评论
-
关于java的检查异常和非检查异常
2012-04-04 21:31 4952这里有一个关于java的检查异常和非检查异常的观点, 我比较赞 ... -
使用ThreadLocal保证DateFormat线程安全
2012-04-03 06:45 3596大家都知道DateFormat是线程非安全的, 一般在多线程环 ... -
使用枚举实现一个状态机
2012-04-02 23:14 3934非常巧妙的一个使用枚举的例子.原文见这里 interface ... -
一个同步队列例子
2012-04-02 21:35 1564这个用的也比较少, 做一个参考, 原文见这里 private ... -
一个读写锁的例子
2012-04-02 21:20 1528用的比较少, 做一个参考. 原文在这里 public clas ... -
如何计算一个合适的线程池大小参数
2012-04-02 20:57 9067原文在这里 下面是一个计算的框架代码: /** * A ... -
正确使用日志的10个技巧
2012-02-11 21:13 28848做一个苦逼的Java攻城师, 我们除了关心系统的架构这种hig ... -
Java编程最差实践
2012-02-04 17:54 26622原文地址:http://www.odi.ch/prog/des ... -
利用jOOR简化Java 反射使用
2012-01-15 20:39 5153原文:http://lukaseder.wordpress.c ... -
《Java Performance》书评
2012-01-15 18:32 2960原文: http://java.dzone.com/rev ... -
《细说Java》读书笔记
2011-10-05 15:01 1991国人写的, 感觉是一 ... -
《Java开发超级工具集》读书笔记
2011-09-28 08:59 2098"工欲善其事必先利其器", 在平时的开发 ... -
《effective java》 读书笔记
2011-07-02 14:52 7599读第一版已经是好几年前的事儿了, 现在想起来也没什么印象, ... -
用java实现"awk -d"功能(保留多行重复)
2010-06-07 21:48 3067一般用过linux脚本的都知道"awk -d&quo ... -
关于方法返回值的两种处理模式
2010-05-13 09:06 2026目前在处理返回值方面, ... -
JVM调优汇总
2010-02-21 19:18 14413参考网址 http://pengjiaheng.spaces. ... -
log4j的输出转换模式
2009-12-12 10:02 1271转换模式(conversion pattern)为" ... -
java正则表达式用法举例
2009-12-08 11:27 4518java正则表达式真难用啊, 这里整理一个java正则表达式用 ... -
Ibatis TypeHandler使用总结
2009-11-25 19:33 16543ibatis中有一个TypeHandler(准确的说应该是Ty ... -
ibatis参数传递小技巧
2009-10-30 14:21 3921使用ibatis操作数据库的时候, 如果这个操作需要一些参数, ...
相关推荐
and externalization) and writers/readers. Chapters 6 through 11 focus on NIO. You explore buffers, channels, selectors, regular expressions, charsets, and formatters. (Formatters were not introduced ...
资源分类:Python库 所属语言:Python 资源全名:nti.externalization-1.1.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
模式技术在软件开发中扮演着至关重要的角色,它是一种提炼并分享最佳实践的方式,通过将成功的解决方案标准化,以便于在不同的项目中重复使用。模式技术的精髓在于将个体或团队的经验转化为可复用的知识,这与知识...
外部化(Externalization)在软件开发中是一种重要的设计原则,特别是在处理字符串和配置信息时。标题提到的"Externalizer-开源"是一个专为实现这一目标的Ant任务。Ant是Apache软件基金会开发的一个Java构建工具,它...
这不仅涉及到硬件的升级和算法的改进,也涉及到系统模块中的统一操作,以确保硬件设备的操作统一化,使数据采集、预处理、分析和挖掘等步骤更流畅高效地进行。 实验验证了优化后的网络数据挖掘系统在精准度方面的...
SECI模型,全称为社会化(Socialization)、外部化(Externalization)、组合化(Combination)和内部化(Internalization),由野中郁次郎和竹內弘高在1995年的著作《The Knowledge-Creating Company》中提出。该模型强调...
- **信息技术的演进**:从早期的大型机到当前的云计算和大数据,IT技术不断进步,为企业提供了更高效的数据处理和分析能力。 - **数据库与数据仓库**:数据库用于存储和管理结构化数据,而数据仓库则侧重于数据分析...
该模型将知识创造过程分为四个阶段,即社会化(Socialization)、外显化(Externalization)、组合化(Combination)、内隐化(Internalization)。这四个阶段构成了一个螺旋上升的循环,知识在这个循环过程中不断被...
2. 外部化(Externalization):这个过程涉及将个人的隐性知识转化为显性知识,通常通过比喻、类比、概念和模型等表达方式。在商业中,这可能表现为将专家或客户的专业知识转化为易于理解的形式。 3. 组合化...
在大数据中,这可能涉及到将数据挖掘结果进行可视化展示,或者通过编程语言实现数据分析模型。 3. 组合(Combination):这一阶段是将多种显性知识整合,以形成新的知识结构或解决方案。大数据环境下的组合可能包括...
"知识管理ppt模板下载"是一个专门针对这一需求的资源,提供了一系列预设计的PPT模版,帮助用户更高效地制作关于知识管理的演示文稿。 在设计知识管理的PPT时,通常会包含以下几个关键知识点: 1. **知识的分类**:...
6. **过程外部化**(Process Externalization): 将业务逻辑从业务应用程序中分离出来,实现更加灵活的流程调整。 #### 六、SOA的案例研究 例如,在**澳大利亚联邦银行**(Commonwealth Bank of Australia)的例子...
SECI模型是研究知识创造和转移的核心理论之一,它将知识的转移和创造过程分为四个阶段:社会化(Socialization)、外部化(Externalization)、组合化(Combination)和内部化(Internalization)。该模型最初由日本...
知识创造的过程,Nonaka & Takeuchi 提出了“SECI”模型,即社会化(Socialization)、外部化(Externalization)、结合化(Combining)和内部化(Embodying)。这个模型描述了隐性知识和显性知识之间的动态交互,...
【SECI模式与旅游高等教育教学】\n\nSECI模式,全称为社会化(Socialization)、外在化(Externalization)、组合化(Combination)和内隐化(Internalization)模式,是由日本学者野中郁次郎(Ikujiro Nonaka)和竹内弘高...
社会化过程将个人经验转化为共享知识,外部化是将隐性知识显性化,组合则是将多种知识整合,内部化是将新知识内化为个人能力。 然而,知识共享面临诸多挑战。知识本身的复杂性,如背景依赖性、动态性、多维性及隐性...
Nonaka提出的SECI模型包括社会化(Socialization)、外化(Externalization)、组合化(Combination)和内化(Internalization)四个过程,通过这些过程促进知识在个人与组织间的流动和转化。 知识管理系统的构建...