Menu Home

java

使用Invocation API调用Java类

InvocationApiTest.java import java.io.*; public class InvocationApiTest { public static void main(String[] args) { System.out.println(args[0]); } } invocationApi.c #include <jni.h> int main() { JNIEnv* env; JavaVM* vm; JavaVMInitArgs vm_args; JavaVMOption options[1]; jint res; jclass cls; jmethodID mid; jstring jstr; jclass stringClass; jobjectArray args; //1.生成Java虚拟机选项 options[0].optionString = “-Djava.class.path=.”; vm_args.version = JNI_VERSION_1_6; vm_args.options […]

Java语言中对象的部分序列化

public class TestExternalizable implements Externalizable { //只对下面2个变量序列化 int No; String name; //下面的变量没有被序列化 int age = 0; public TestExternalizable() { // 在恢复Externalizable对象的时候,默认构造函数会被调用,这一点跟恢复一个Serializable对象不同 System.out.println(“Default Constructor”); } public TestExternalizable(int No, String name, int age) { System.out.println(“Other Constructor”); this.name = name; this.No = No; this.age = age; } @Override public String toString() { return […]

Java基本IO操作(备忘)

#java 1.1 public class IODemo { public static void main(String[] args) { try { // 1a.Reading input by lines BufferedReader in = new BufferedReader(new FileReader(args[0])); String s, s2 = new String(); while ((s = in.readLine()) != null) { s2 += s + “\n”; } in.close(); // 1b.Reading standard input BufferedReader […]

Java构建类型安全的枚举类型

在《Java编程思想-网络版》一书中看到一段有意思的代码。 先来看一段Java实现C/C++枚举效果的非类型安全的版本: public interface Months { int JANUARY = 1, FEBRUARY = 2, MARCH = 3, APRIL = 4, … …; } 上面的代码实际上是在利用Java中interface的成员变量会自动成为public static final的事实,这样我们可以使用Months.JANUARY的方法来引用这些值。但是这个方法的缺陷是非类型安全的,因为我们最终获得的其实是个int。这种方法带来的好处只是减少了硬编码。 接下来看看Bruce Eckel提供的类型安全的版本: public final class Month2 { private String name; private Month2(String nm) { name = nm; } public String toString() { return name; } […]

Java线程同步方法

CountDownLatch CountDownLatch主要用来等待一系列线程都完成后,再继续下一步的执行,类似于C++中的join。 import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CountDownLatchExample { public static void main(String[] args) { ExecutorService pool = Executors.newCachedThreadPool(); final CountDownLatch doneLatch = new CountDownLatch(10); for(int i = 0; i < 10; i++) { Runnable runnable = new Runnable() { @Override public void run() { try { […]

Java语言中的静态类

在写Android程序的时候,系统会自动生成一个R.java,这个类中使用了大量的静态类,对一个C++程序员来说,这是个新鲜事物,下面来看看这个神奇的玩意。 静态内部类的语法 public class ExternalClass { public static final class InnerClass { //… } } 静态内部类的作用 一般情况很少会用到静态类,但它也并不是一无是处,不然Java也就不会引入这个语法了。静态内部类的一个最大的用处出现在对Java类的测试中,例如: public class Test { public static void main(String[] args) { Other.Test.printx(); } } class Other{ static class Test { Other o = new Other(); o.printx(); } public void printx() { System.out.println(“Other class”); } […]

android平台YUV420SP到RGB565的转换

/** * @param yuvDataArray * @param width * @param height * @return int[] : ARGB array * @throws NullPointerException * @throws IllegalArgumentException */ private static int[] decodeYUV(byte[] yuvDataArray, int width, int height) throws NullPointerException, IllegalArgumentException { int size = width * height; if(yuvDataArray == null) throw new NullPointerException(“buffer yuvDataArray is […]

使用Java 代理(proxy)类

HelloWorld.java package net.lnmcc.www; public interface HelloWorld { public void sayHelloWorld(); public void sayGoodBye(); } HelloWorldHandler.java package net.lnmcc.www; import java.lang.reflect.*; public class HelloWorldHandler implements InvocationHandler { private Object obj; public HelloWorldHandler(Object obj) { super(); this.obj = obj; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result […]