1.JAVA调用系统命令或可执行程序
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public classTest{
Stringcmd1= "F:\\apache-tomcat-6.0.20.exe";
Stringcmd2= "D:\\Program Files\\MicrosoftOffice\\OFFICE11\\WINWORD.EXE F:\\test.doc";
Stringcmd3= "cmd.exe /c start F:\\test.doc";
String cmd4= "ping www.baidu.com";
publicvoidmethod() {
Runtime run = Runtime.getRuntime();//返回与当前 Java应用程序相关的运行时对象
try {
Process p = run.exec(cmd4);//启动另一个进程来执行命令
BufferedInputStream in = newBufferedInputStream(p.getInputStream());
BufferedReader inBr = new BufferedReader(newInputStreamReader(in));
String lineStr;
while ((lineStr = inBr.readLine()) !=null) {
//获得命令执行后在控制台的输出信息
System.out.println(lineStr);//打印输出信息
}
//检查命令是否执行失败。
if (p.waitFor() != 0) {
if (p.exitValue() == 1)//p.exitValue()==0表示正常结束,1:非正常结束
System.err.println("命令执行失败!");
}
inBr.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.Java序列化(串行化)
Java建立的一种传输机制,它能够把对象的信息转换成一系列的字节码,这些字节码可以被传输到网络或者存储到一个文件中。序列化的使用非常简单,但它还是有限制的。它必须立即存取对象的特征,而且它不适合存取大批量的数据。在更改一个对象的属性时如果有错误发生它无法实现“回滚”,因此不适于应用程序对数据完整性的要求,而且不能实现多个线程或程序异步读写数据。所有这些不足都使得序列化无法满足大多数数据存储要求。
1)串行化能保存的元素
串行化只能保存对象的非静态成员变量,不能保存任何成员方法和静态成员变量,而且串行化保存的只是变量的值,对于变量的任何修饰符都不能保存。若是想序列化和反序列化静态变量,可以让被序列化的类实现wrieObject(ObjectOuputStream);readObject(ObjectInputStream)把静态变量写入到输出流中,可以从输入流中读入,另外final static常量可以序列化。
a.永久性保存对象,保存对象的字节序列到本地文件中;
b.通过序列化对象在网络中传递对象;
c.通过序列化在进程间传递对象。
2)串行化
将对象的状态保存下来,在需要时再将对象恢复。接口Serializable用来作为实现对象串行化的工具,只有实现了Serializable的类的对象才可以被串行化。
3)transient关键字
对于某些类型的对象,其状态是瞬时的,这样的对象是无法保存其状态的。例如一个Thread对象或一个FileInputStream对象 ,对于这些字段,我们必须用transient关键字标明,否则编译器将报错。
另外,串行化可能涉及将对象存放到磁盘上或在网络上传输数据,这时候就会产生安全问题。因为数据位于Java运行环境之外,不在Java安全机制的控制之中。对于需要保密的字段,不应保存在永久性介质中,或者不应简单地不加处理地保存下来 ,为了保证安全性。应该在这些字段前加上transient关键字,在一个特定对象的一个域上关闭serialization,表示此域不是该对象可串行化的一部分。
4)若父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
5) 在Android开发中:
a.在使用内存的时候,Parcelable类比Serializable性能高,所以推荐使用Parcelable类。
b.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
c.Parcelable不能使用在将数据存储在磁盘上的情况下,因为Parcelable不能很好的保证在外界有变化的情况下数据的持续性。尽管Serializable效率低点,也不提倡用,但 在这种情况下,还是建议你用Serializable。
3.JDO
JDO 是Java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBCAPI的使用).这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上.另外,JDO很灵活,因为它可以在任何数据底层上运行.JDBC只是面向关系数据库(RDBMS)。JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强.
JDO:JDO集成了很多上述持久性机制的特性,这使得在JDO中创建一个持久化(persistence)类就像创建一个序列化类一样简单。JDO支持批量数据的存储,数据一致性,并发处理和JDBC的查询功能。就像对象-关系映射软件和对象数据库一样,它允许使用面向对象的高级特性比如“继承”。它避免了像EJB(sun的服务器端组件模型,设计目标与核心应用是部署分布式应用程序)中实体Bean一样必须依赖于来自厂商定义的严格规范。同EJB一样,JDO也不规定任何特定的后端数据库。但是,这里还是要说一下,世界上没有“万灵丹”。所以,使用JDO并不是对于每一个应用程序都是有好处的。很多应用程序完全可以使用其他更理想的存储机制。
转自:http://www.cnblogs.com/devinzhang/archive/2012/02/09/2343771.html