bejava的简单介绍
本篇文章给大家谈谈bejava,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、如何用Java判断两个文件内容是否相同
- 2、mvc中业务逻辑不是在model层中的吗,然而我又发现model就是javabean,javabe
- 3、java想要开始学习,麻烦推荐几本好书!谢
- 4、java for循环用法
- 5、关于Java的报错
如何用Java判断两个文件内容是否相同
第一,判读MD5值或SHA-1,以MD5为例,
// 计算文件的 MD5 值
publicstatic String getFileMD5(File file) {
if (!file.isFile()) {
return null;
}
MessageDigest digest = null;
FileInputStream in = null;
byte buffer[] = newbyte[8192];
int len;
try {
digest =MessageDigest.getInstance("MD5");
in = new FileInputStream(file);
while ((len = in.read(buffer)) != -1) {
digest.update(buffer, 0, len);
}
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
第二,直接判读内容,代码如下:
public class IOOperation
{
public static void main(String[] args)
{
FileInputStream File1 = null;
FileInputStream File2 = null;
BufferedReader in = null;
String sFile;
if(args.length != 2)
{
System.out.println("The command line should be: java IOOperation testX.txt testX.txt");
System.out.println("X should be one of the array: 1, 2, 3");
System.exit(0);
}
try
{
File1 = new FileInputStream(args[0]);
File2 = new FileInputStream(args[1]);
try
{
if(File1.available() != File2.available())
{
//长度不同内容肯定不同
System.out.println(args[0] + " is not equal to " + args[1]);
}
else
{
boolean tag = true;
while( File1.read() != -1 File2.read() != -1)
{
if(File1.read() != File2.read())
{
tag = false;
break;
}
}
if(tag == true)
System.out.println(args[0] + " equals to " + args[1]);
else
System.out.println(args[0] + " is not equal to " + args[1]);
}
}
catch(IOException e)
{
System.out.println(e);
}
}
catch (FileNotFoundException e)
{
System.out.println("File can't find..");
}
finally
{
try
{
if(File1 != null)
File1.close();
if(File2 != null)
File2.close();
}
catch (IOException e)
{
System.out.println(e);
}
}
}
}
这里因为使用了第二种方法所以直接用了main函数,代码结构可以再优化。MD5方法用到了以前没有接触到的知识,如MessageDigest、BigInteger等,个人觉得要想了解这些方法最好的方法就是读API文档。
mvc中业务逻辑不是在model层中的吗,然而我又发现model就是javabean,javabe
jsp对应mvc的v层,就是视图层,用来显示用户界面
servlet是万能的,你想要它做什么都可以,jsp编译后也是生成servlet,不过,一般来说用来做mvc的c层,就是控制层,用来调用不同的业务逻辑
JaveBean对应mvc的m层,就是数据层,负责孩孩粉绞莠悸疯溪弗娄根据业务逻辑处理数据
以上是我自己归纳的,意思应该差不多,呵呵
java想要开始学习,麻烦推荐几本好书!谢
Java2十大经典图书全给了:
第一名:Java编程思想第二版(Thinking in java second)
包含范围:全部。
没说的,绝对的大师作品,当之无愧的第一。第一版时就享誉整个java界(当时网上好象也有人译了)。国内版是京京工作室翻译的,基本上毁了此书--错误术语太多。推荐高手看E文版,新手就不要先看此书了。第二版更精采,台湾的侯捷译了此书。可以到看看前几章的中文版(不过是台湾术语)。希望国内会快些引入此书,你也可到--作者的主页免费下载此书推荐。有chm格式的,非常棒!BTW:这位大师最近在写Thinking in Python相信又是一本经典名著:)
第二名:Java2编程详解(special edition java2)
包含范围:全部
这本书会排在core java2的前面可能很多人会不同意,但是就中译本和内容来看非常全面。适合新手成为高手。虽然国内的价位高了些(150),但基本还是值得的。该有的内容都有了,做参考书也很不错。BTW,这个系列中的oracle8/8i使用手册也是一本很经典的书,同样推荐。
第三名:Java2核心技术卷一,二(core java2 volume1,2)
包含范围:全部
这两本我把它们看成一本不会有人有异议吧。这也是Sun的官方的书,我觉得相对来说。第二卷高级特性要比第一卷基础知识好(第一卷又是京京工作室译的--真影响情绪:()。内容同样很全面,但是卷一虽说是基础知识,同样对新手来说不是很合适。感觉条理性不强,而且内容有些混杂,但第二卷完全可以弥补这些--精辟而细致,很适合有一定基础的Java程序员看。
第四名:Java 2图形设计 卷1:AWT 卷2:Swing-Graphic Java 1.2 Mastering the JFC Volume I:AWT SWING 3rd Edition
包含范围:Java图形设计
没什么说的了,尽管图形设计不如J2EE那么火 ,而且Win32下做应用程序也不是java的强项,但是AWT和Swing仍然是Java程序员的必修课。看这两本就够了,看看厚度就知道了,而且这也是Sun官方出的图书。
第五名:J2EE构建企业系统专家级解决方案
包含范围:J2ee
清华大学出版社 译作者:[美]Paul J. Perrone,et al.著 张志伟等译
又是一本极厚的书1038页,105元。不过内容十分丰富,适合想对J2EE整体做了解的程序员,至于每项都想精就不太可能了,呵呵。毕竟在Java中思想是主要的。在这类中有本Java服务器高级编程也很不错,机工华章出的-wrox系列中的。
第六名: Java XML编程指南
电子工业出版社 译作者: [美]Tom Myers,Alexander Nakhimovsky著
包含范围:Java+XML
XML在Java中的地位也越来越重要了,而国内能看到的还有一本中国电力出的o eilly的Java和XML。最后我还是选了这本wrox的,当然你要是想好好学学XML本身,还是看看那本XML高级编程吧。wrox系列中的-机工华章出的。
第七名:书名:Jini核心技术 英文原书名: Core Jini
作者: W.Keith Edwards
包含范围:Jini
Jini也是Java体系中很重要的部分,而且更重要的是这本可能是国内唯一的一本Jini专著-翻译的也不错。在我看来是当之无愧的经典,同样是Sun的官方图书,内容很清晰透彻。
第八名:Enterprise JavaBeans第二版 英文原书名: Enterprise JAVABEANS
作者: (美)Richard Monson-Haefel
包含范围:EJB
O‘reilly出的,ejb的重要性我不用多说了吧。尽管有人说这本译的不好,但是同样它是国内目前唯一的EJB专著。o eilly的书就是只讲一方面或一项技术,很细,但价格也不菲,这本书的架构还可以,值得一看。
!!!!!!!!第九名:数据结构与算法分析(Java版)
译作者: [美]Clifford A.Shaffer著 张铭 刘晓丹译
包含范围:Java算法
尽管基本上Java图书都是讲Java本身的特性。因为Java的体系太庞大了,而用Java来实现的数据结构与算法,这本书也是唯一一本,所以尽管这本不是那么的好但还是做以推荐。
第十名:软件工程Java语言实现 英文原书名: Software Engineering with Java
作者: Stephen R.Schach 译者: 袁兆山等
这本书没什么多说的,纯理论性的东西,但软件工程的重要也是有目共睹的,而且同样是这个领域中唯一的一本Java书。
参考资料:第九名:数据结构与算法分析(Java版)
java for循环用法
java for循环用法如下:
javafor循环语句语法:for(初始化; 布尔表达式; 更新) {// 代码语句}。最先执行初始化步骤,可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。然后,检测布尔表达式的值:1、如果为 true,循环体被执行。2、如果为 false,循环终止,开始执行循环体后面的语句。执行一次循环后,更新循环控制变量。再次检测布尔表达式,循环执行上面的过程。
java中有三种类型的for循环。1、简单for循环2、for-each或增强型for循环3、标记for循环。Java简单For循环:简单的for循环与C/C++相同。我们可以初始化变量,检查条件和增加/减少变量的值。语法为:
for(initialization;condition;incr/decr){
//code to be executed
}
Java for-each循环:for-each循环用于在java中遍历数组或集合。它比简单的for循环更容易使用,因为不需要递增值和使用下标符号。语法为:
for(Type var:array){
//code to be executed
}
关于Java的报错
UnsatisfiedLinkError
在把本机调用链接到对应的本机定义时,类装入器扮演着重要角色。如果程序试图装入一个不存在或者放错的本机库时,在链接阶段的解析过程会发生 UnsatisfiedLinkError。JVM 规范指定 UnsatisfiedLinkError 是:
对于声明为 native 的方法,如果 Java 虚拟机找不到和它对应的本机语言定义,就会抛出该异常。
当调用本机方法时,类装入器会尝试装入定义了该方法的本机库。如果找不到这个库,就会抛出这个错误。
清单 6 演示了抛出 UnsatisfiedLinkError 的测试用例 :
清单 6. UnsatisfiedLinkError.java
public class UnsatisfiedLinkErrorTest {
public native void call_A_Native_Method();
static {
System.loadLibrary("myNativeLibrary");
}
public static void main(String[] args) {
new UnsatisfiedLinkErrorTest().call_A_Native_Method();
}
}
这段代码调用本机方法 call_A_Native_Method(),该方法是在本机库 myNativeLibrary 中定义的。因为这个库不存在,所以在程序运行时会发生以下错误:
The java class could not be loaded. java.lang.UnsatisfiedLinkError:
Cant find library myNativeLibrary (myNativeLibrary.dll)
in sun.boot.library.path or java.library.path
sun.boot.library.path=D:/sdk/jre/bin
java.library.path= D:/sdk/jre/bin
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2147)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:2006)
at java.lang.Runtime.loadLibrary0(Runtime.java:824)
at java.lang.System.loadLibrary(System.java:908)
at UnsatisfiedLinkErrorTest.clinit(UnsatisfiedLinkErrorTest.java:6)
本机库的装入由调用 System.loadLibrary() 方法的类的类装入器启动 —— 在清单 6 中,就是 UnsatisfiedLinkErrorTest 的类装入器。根据使用的类装入器,会搜索不同的位置:
对于由 bootstrap 类装入器装入的类,搜索 sun.boot.library.path。
对于由扩展类装入器装入的类,先搜索 java.ext.dirs,然后是 sun.boot.library.path,然后是 java.library.path。
对于由系统类装入器装入的类,搜索 sun.boot.library.path,然后是 java.library.path。
在清单 6 中,UnsatisfiedLinkErrorTest 类是由系统类装入器装入的。要装入所引用的本机库,这个类装入器先查找 sun.boot.library.path,然后查找 java.library.path。因为在两个位置中都没有需要的库,所以类装入器抛出 UnsatisfiedLinkageError。
==========================================================================
java.lang.UnsatisfiedLinkError 出现这种错误的原因是一般是java虚拟机找不到声明为native方法的本地语言定义时,出现的错误。在我的理解过程中我一般都认为是由于导入dll或 者导入lib文件不正确导致的。有些需要静态导入就没有问题(即在前面加static来导入lib文件),如果是不加static导入也就是动态导入的时 候,那么需要添加catch的抛出异常来解决,如
try{
System.loadLibrary("vtkCommonJava");
System.loadLibrary("vtkFilteringJava");
System.loadLibrary("vtkIOJava");
System.loadLibrary("vtkImagingJava");
System.loadLibrary("vtkGraphicsJava");
System.loadLibrary("vtkRenderingJava");
}catch(Throwable e)
{
System.out.println("The load problem");
}
这种方式来判断,或者直接在类前面添加
static{
System.loadLibrary("vtkCommonJava");
System.loadLibrary("vtkFilteringJava");
System.loadLibrary("vtkIOJava");
System.loadLibrary("vtkImagingJava");
System.loadLibrary("vtkGraphicsJava");
System.loadLibrary("vtkRenderingJava");
}
================================================================================
关于java.lang.UnsatisfiedLinkError(JNI)
目标:把pbp1.0的java包和native移到GEM中,并使GEM在新的虚拟机上正常运行
背景:GEM(1)有一堆java包和native函数,pbp1.0是虚拟机和JAVA基本包,要将pbp1.0的虚拟机移走只用它的JAVA基本包和native函数。
问题:在将GEM和pbp1.0的native函数生成一个动态库后在程序里System.loadLibrary()无法加载,报java.lang.UnsatisfiedLinkError
解决过程:
1,理论
我们知道,JAVA调用native函数时,必须通过System.loadLibrary()或System.load将其native函数所在动态库 加载到虚拟机。并在运行时指明-Djava.library.path或-Dsun.boot.library.path,将其指向包含有native函 数的动态库所在位置。
2,实施
我按这个步骤操作完成后就是无法加载我生成的动态库libgem.so,这个库用到的其他动态库包括:rt,pthread,freetype,dl, directfb,而directfb用到的动态库有rt,dl,pthread,freetype,jpeg,png,这些库除了directfb要生 成外其余都在/lib目录下存在。
3,思路
先写了一个Hello的测试用例。发现在native里所使用到其他动态库时,无论是否存在于相关目录,仍然无法加载。然后经过修改编译选项,把所使用到的动态库连动态连接进目标库,如下:
$(GCC) -fPIC -shared -o libdirectfb.so ... -lpng -ljpeg -lpthread -lrt -ldl, -lfreetype
经过这么一个修改后,directfb可以加载。
这也说明System.loadLibrary()所加载的动态库所引用的所有符号都要能找到。如果有一个无法找到将无法加载。可以写一个空的main ()函数,对你的动态库进行连接,如果动态库里所引用的符号在指定的动态库和本身找到不到则无法编译通过,那么这个动态库也肯定加载不了。
4,问题解决
按照这个思路,对libgem.so的编译Makefile做相应修改后,问题解决!并在LD_LIBRARY_PATH加入动态库所在目录。
(1) MHP (Multimedia Home Platform) was developed by the DVB Project as the world's first open standard for interactive television. It is a Java-based environment which defines a generic interface between interactive digital applications and the terminals on which those applications execute. MHP was designed to run on DVB platforms but there was a demand to extend the interoperability it offers to other digital television platforms. This demand gave rise to GEM, or Globally Executable MHP, a framework which allows other organisations to define specifications based on MHP.
====================================================================================
另外,还可能是dll本身的问题,使用release版的,而不要用debug版的
=============================================================================
关于编写JNI时的发生的unsatisfiedlinkError错误- -
这个错误也让我郁闷了半天,现在我把它写出来,可以让大家少走点弯路。一般这个错误有两种:
1。unsatisfiedlinkError:dll名,那说明你没有把dll放到合适的位置,一般就和要调用原生函数的类放在一起,当然前提是你成功的生成dll了
2。unsatisfiedlinkError:方法名,这个时 候你其实dll已经成功生成了,而且位置也正确,它的意思就是你没有定义那个函数,你可能会说,我明明定义了,其实当你发现问题所在,你只能自虐了,肯定 是你在C文件中定义函数时有些字母大小写错了,因为其他地方是自动生成的,不会出错。尤其是直接从网上拷贝源程序时经常发生这种问题,有些作者不负责任, 把有错误的程序也贴上去。
转自:
关于bejava和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。