Category:Java

Found 13 records. At Page 2 / 3.

Java【解決方法】Byte[]、UByte[]的問題 Byte有負號

-
更新於

    String str = "這是測試!ABC123.";
    byte[] bytes = {};
    try {
        bytes = str.getBytes("UTF-8");
    }catch(Exception ex){
    }
    for(int i=0;i<bytes.length;i++){
        System.out.println(bytes[i]);
    }
    System.out.println(bytes);

我們都知道,其實,Java裡面本身並不支援Ubyte。若真要使用差不多的功能,建議可以改用Short。

Ubyte就是沒有負號,而Byte就是可能會有負號。跟轉成二進制之後的高位補數與否有關係的樣子。

在此提供解決方法。直接看Code。

    //將字串以UTF8編碼轉成Ubyte[](實際上是short[]型別)
    public static short[] StringtoUByte(String str) {
        byte[] bytes = {};
        try {
            bytes = str.getBytes("UTF-8");
        }catch(UnsupportedEncodingException ex){

        }
        return BytetoUByte(bytes);
    }

    //將Ubyte[]以UTF8編碼轉成字串(實際上是short[]型別轉成字串)
    public static String UBytetoString(short[] ubytes) {
        byte[] bytes = UBytetoByte(ubytes);
        String str = "";
        try{
            str = new String(bytes,"UTF-8");
        }catch (Exception ex){

        }
        return str;
    }

    //將Ubyte[]轉成byte[](將short[]轉成byte[])
    public static byte[] UBytetoByte(short[] ubytes) {
        byte[] bytes = new byte[ubytes.length];
        for(int i=0;i<bytes.length;i++){
            bytes[i]=signedToBytes(ubytes[i]);
        }
        return bytes;
    }

    //將byte[]轉成Ubyte[](將byte[]轉成short[])
    public static short[] BytetoUByte(byte[] bytes) {
        short[] ubytes = new short[bytes.length];
        for(int i=0;i<bytes.length;i++){
            ubytes[i]=unsignedToBytes(bytes[i]);
        }
        return ubytes;
    }

    //將byte轉成Ubyte(將byte轉成short)
    public static short unsignedToBytes(byte b) {
        return (short)(b & 0xFF);
    }

    //將Ubyte轉成byte(將int轉成byte)
    public static byte signedToBytes(int b) {
        return ((byte)(b & 0xFF));
    }

可能看官們都注意到,byte轉ubyte都是 一樣的寫法。==> b & 0xFF

只是給他加個二進位負號而已,再加一個負號又變回原樣了。So,解釋完畢,上面的代碼自行取用吧。


This entry was posted in Java, Note By .

int 和 Integer 的比較 Java 程式設計

-
更新於

int test_int_1 = 1;
int test_int_2 = 1;
System.out.println(test_int_1==test_int_2);//true
int test_int_3 = new Integer(1);
int test_int_4 = new Integer(1);
System.out.println(test_int_3==test_int_4);//true
int test_int_5 = new Integer("1");
int test_int_6 = new Integer("1");
System.out.println(test_int_5==test_int_6);//true
int test_int_7 = Integer.valueOf(1);
int test_int_8 = Integer.valueOf(1);
System.out.println(test_int_7==test_int_8);//true
int test_int_9 = Integer.valueOf("1");
int test_int_10 = Integer.valueOf("1");
System.out.println(test_int_9==test_int_10);//true
Integer test_integer_1 = 1;
Integer test_integer_2 = 1;
System.out.println(test_integer_1==test_integer_2);//true
System.out.println(test_integer_1.equals(test_integer_2));//true
Integer test_integer_3 = new Integer("1");
Integer test_integer_4 = new Integer("1");
System.out.println(test_integer_3==test_integer_4);//false
System.out.println(test_integer_3.equals(test_integer_4));//true
Integer test_integer_5 = Integer.valueOf("1");
Integer test_integer_6 = Integer.valueOf("1");
System.out.println(test_integer_5==test_integer_6);//true
System.out.println(test_integer_5.equals(test_integer_6));//true

據我實驗觀察,所得 只要是 int==int 的比較,一定是比較值,若為Integer==int,也一定是比較其值。

唯一為False的情況是當有new出現時:

new Integer("1")==new Integer("1");//false

用 valveOf 得出來的 Integer 類別,進行比較(==),也是 valueOf括號內的值(不管類別是String還是int…)(都小於等於127大於等於負128的情況)是否相等。

test_integer_6 = Integer.valueOf("1");
Integer test_integer_7 = Integer.valueOf(1);
System.out.println(test_integer_6==test_integer_7);//true
System.out.println(test_integer_6.equals(test_integer_7));//true

System.out.println(test_integer_1==test_integer_3);//false
System.out.println(test_integer_1.equals(test_integer_3));//true
System.out.println(test_integer_5==test_integer_3);//false
System.out.println(test_integer_5.equals(test_integer_3));//true
System.out.println(test_integer_7==test_integer_3);//false
System.out.println(test_integer_7.equals(test_integer_3));//true

若 Integer 比較 Integer ,其中之一關鍵字有 new ,== 比較子出來的結果可能就為 False 。

以下為特殊例子!數值小於等於127大於等於負128時不會new,但若不在此區間時,就會以new宣告。

以new宣告的時候==通常都是false,

進行 比較 int 時若其值相同會轉發True。

Integer test_special_1 = Integer.valueOf(127);//等於Integer test_special_1 = 127;
Integer test_special_2 = Integer.valueOf(127);
System.out.println(test_special_1==test_special_2);//true
System.out.println(test_special_1.equals(test_special_2));//true
Integer test_special_3 = Integer.valueOf(128);//等於Integer test_special_1 = 128;
Integer test_special_4 = Integer.valueOf(128);
System.out.println(test_special_3==test_special_4);//false
System.out.println(test_special_3.equals(test_special_4));//true

若本人有誤,歡迎更正。


This entry was posted in Experience, Functions, Java By .

異步任務Java Android

-
更新於

 public class ExcuteAsyncTaskOperation extends AsyncTask<Void, Integer, String>{

        @Override
        protected void onPreExecute() {
            //執行UI設定
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(Void... params) {
            //進行背景工作,如「Network」,並可轉發值。
            //在迴圈中使用publishProgress((onProgressUpdate引數類別)變數);以傳遞資料。
            //例如publishProgress((int)50);
            return null;
        }

        @Override
        protected void onProgressUpdate(Integer... progress) {
            //設定更新進程條
            //setProgressPercent(progress[0]);
        }

        @Override
        protected void onPostExecute(String result) {
            //結束,更新UI介面
            super.onPostExecute(result);
        }
    }

運行方法

    new ExcuteAsyncTaskOperation().execute();

This entry was posted in Java, Note By .