• C#转java需要注意的问题


    开发场景:

    把圈存机的程序移植到安卓环境(A302多媒体pos机)

    ----------------------------

    传引用

    C# 有ref out的方法传引用。

    java默认是不支持传引用的,如果一定要传,可以用声明对象的方式,传一个对象,然后在函数内部处理对象跟传引用是类似的。

    另外还有一种方式是传byte[] byte数组默认是引用的效果。

    例:

    传对象

    ClassA a = new ClassA();

    a.id = 1;

    test(a);

    String test_a = a.id ; // test_a 为 2

    function test(ClassA a){

    a.id = 2;

    }

    传byte[]

    byte[] t = new byte[1];

    t[0] = 1;

    test(t); // 执行完后 t[0] 为 2

    function test(byte[] a){

    a[0] = 2;

    }

    ----------------------------

    byte类型的范围不同

    C#是 0 至 255

    java 是 -128 至 127

    默认情况下是可以直接转换的。

    如果在java上写255,可以这样 (byte)255。

    有一种情况需要注意 在位运算(如操作符 <= >= << >>)等操作时,结果会不一样。

    一般像这种情况,都是遇到最基础的函数问题,建议在网上搜集一下相关的java版的函数。

    ----------------------------

    Zlib压缩

    C#上采用的byte[]数组压缩转换为java版的如下,别的压缩后结果不一样(这个问题当时花了两天时间)

    /**

     * 压缩

     * 

     * @param data

     *            待压缩数据

     * @return byte[] 压缩后的数据

     */

    public static byte[] compress(byte[] data) {

    byte[] output = new byte[0];

    Deflater compresser = new Deflater();

    compresser.reset();

    compresser.setInput(data);

    compresser.finish();

    ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length);

    try {

    byte[] buf = new byte[1024];

    while (!compresser.finished()) {

    int i = compresser.deflate(buf);

    bos.write(buf, 0, i);

    }

    output = bos.toByteArray();

    } catch (Exception e) {

    output = data;

    e.printStackTrace();

    } finally {

    try {

    bos.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    compresser.end();

    return output;

    }

    ----------------------------

    返回首页的跳转

    Intent intent = new Intent(mContext, MainActivity.class);

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    startActivity(intent);

    跳回首页最好加这两个参数,可以保证界面返回不会重复。

    ----------------------------

    DES加密算法

    java版的如下。网上有很多不正确的版本。

    /**

     * des加密算法,ECB方式,NoPadding模式,数据字节必须是8的整数倍

     * 

     * @param key

     * @param data

     *            数据字节必须是8的整数倍

     * @return

     * @throws Exception

     */

    public static byte[] encryptECBPKCS5Padding(byte[] key, byte[] data) throws Exception {

    Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");

    DESKeySpec desKeySpec = new DESKeySpec(key);

    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

    SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

    cipher.init(Cipher.ENCRYPT_MODE, secretKey);

    return cipher.doFinal(data);

    }

  • 相关阅读:
    【锁】java 锁的技术内幕
    【BlockingQueue】BlockingQueue 阻塞队列实现
    【多线程】获取多个线程任务执行完事件
    【spring cloud】源码分析(一)
    【spring boot】FilterRegistrationBean介绍
    【FAQ】服务下线
    解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)...
    实现人民币大写代码解析
    application.yml使用@符合问题:'@' that cannot start any token. (Do not use @ for indentation)
    Maven常见异常及解决方法---测试代码编译错误
  • 原文地址:https://www.cnblogs.com/yuer01/p/5709867.html
Copyright © 2020-2023  润新知