zoukankan      html  css  js  c++  java
  • 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);

    }

  • 相关阅读:
    文件的上传和下载
    UIMenuController
    iOS中JavaScript和OC交互
    显示图片的各种方式
    图文混排
    介绍一下Cocao 和Cocoa Touch
    iOS 利用UIWebView与JavaScript交互的最简单办法(本人已验证可行)
    UIAlertView和UIAlertControl
    iOS的一些常用性能优化,和内存优化的方法
    关于ARC和MRC
  • 原文地址:https://www.cnblogs.com/yuer01/p/5709867.html
Copyright © 2011-2022 走看看