android byte的使用
生活随笔
收集整理的這篇文章主要介紹了
android byte的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天,簡單講講android里byte的使用。
這個其實很簡單,但是自己覺得一直沒有完全弄明白,所以記錄一下。
byte即字節的意思,是java中的基本類型,用心申明字節型的變量。
通常在讀取非文本文件時(如圖片,聲音,可執行文件)需要用字節數組來保存文件的內容,在下載文件時,也是用byte數組作臨時的緩沖器接收文件內容。所以說byte在文件操作時是必不可少的。不管是對文件寫入還是讀取都要用到。
byte在java中是一種是數據類型,代表一個字節,一個字節包含8個位,所以,byte類型的取值范圍為-128到127。
在某些程序中(尤其是和硬件有關的程序)會將某些數據存儲到字節類型的變量中,比如00110010,其中每個位都代表一個參數,然后以位運算的方式對參數進行取值和賦值操作。
下面介紹一些byte的相關函數:
一、實現功能
1、int與byte互轉
2、int與byte[]互轉
3、short與byte互轉
4、short與byte[]互轉
5、16位short與byte[]互轉
6、long與byte[]互轉
7、byte[]與inputstream互轉
8、byte與String互轉
9、16進制字符轉int
10、十進制轉2進制
11、byte[]轉16進制字符
12、byte[]數組指定位置抽取byte[]
二、代碼實現
package cc.eguid.util;import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; /*** 基本數據互轉工具* @author eguideguid的官網:www.eguid.cc*eguid的csdn博客:http://blog.csdn.net/eguid_1,博客園:http://www.cnblogs.com/eguid */ public class ByteUtil {private static ByteBuffer buffer = ByteBuffer.allocate(8);/*** int轉byte* @param x* @return*/public static byte intToByte(int x) { return (byte) x; } /*** byte轉int* @param b* @return*/public static int byteToInt(byte b) { //Java的byte是有符號,通過 &0xFF轉為無符號return b & 0xFF; } /*** byte[]轉int* @param b* @return*/public static int byteArrayToInt(byte[] b) { return b[3] & 0xFF | (b[2] & 0xFF) << 8 | (b[1] & 0xFF) << 16 | (b[0] & 0xFF) << 24; }public static int byteArrayToInt(byte[] b, int index){return b[index+3] & 0xFF | (b[index+2] & 0xFF) << 8 | (b[index+1] & 0xFF) << 16 | (b[index+0] & 0xFF) << 24; }/*** int轉byte[]* @param a* @return*/public static byte[] intToByteArray(int a) { return new byte[] { (byte) ((a >> 24) & 0xFF), (byte) ((a >> 16) & 0xFF), (byte) ((a >> 8) & 0xFF), (byte) (a & 0xFF) }; } /** * short轉byte[]* * @param b * @param s * @param index */ public static void byteArrToShort(byte b[], short s, int index) { b[index + 1] = (byte) (s >> 8); b[index + 0] = (byte) (s >> 0); }/** * byte[]轉short * * @param b * @param index * @return */ public static short byteArrToShort(byte[] b, int index) { return (short) (((b[index + 0] << 8) | b[index + 1] & 0xff)); }/** * 16位short轉byte[] * * @param s * short * @return byte[]* */ public static byte[] shortToByteArr(short s) { byte[] targets = new byte[2]; for (int i = 0; i < 2; i++) { int offset = (targets.length - 1 - i) * 8; targets[i] = (byte) ((s >>> offset) & 0xff); } return targets; }/*** byte[]轉16位short* @param b* @return*/public static short byteArrToShort(byte[] b){return byteArrToShort(b,0);}/*** long轉byte[]* @param x* @return*/public static byte[] longToBytes(long x) { buffer.putLong(0, x); return buffer.array(); } /*** byte[]轉Long* @param bytes* @return*/public static long bytesToLong(byte[] bytes) { buffer.put(bytes, 0, bytes.length); buffer.flip();//need flip return buffer.getLong(); }/*** 從byte[]中抽取新的byte[]* @param data - 元數據* @param start - 開始位置* @param end - 結束位置* @return 新byte[]*/public static byte[] getByteArr(byte[]data,int start ,int end){byte[] ret=new byte[end-start];for(int i=0;(start+i)<end;i++){ret[i]=data[start+i];}return ret;}/*** 流轉換為byte[]* @param inStream* @return*/public static byte[] readInputStream(InputStream inStream) {ByteArrayOutputStream outStream = null;try {outStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];byte[] data = null;int len = 0;while ((len = inStream.read(buffer)) != -1) {outStream.write(buffer, 0, len);}data = outStream.toByteArray();return data;}catch (IOException e) {return null;} finally {try {if (outStream != null) {outStream.close();}if (inStream != null) {inStream.close();}} catch (IOException e) {return null;}}}/*** byte[]轉inputstream* @param b* @return*/public static InputStream readByteArr(byte[] b){return new ByteArrayInputStream(b);}/*** byte數組內數字是否相同* @param s1* @param s2* @return*/public static boolean isEq(byte[] s1,byte[] s2){int slen=s1.length;if(slen==s2.length){for(int index=0;index<slen;index++){if(s1[index]!=s2[index]){return false;}}return true;}return false;}/*** byte數組轉換為Stirng* @param s1 -數組* @param encode -字符集* @param err -轉換錯誤時返回該文字* @return*/public static String getString(byte[] s1,String encode,String err){try {return new String(s1,encode);} catch (UnsupportedEncodingException e) {return err==null?null:err;}}/*** byte數組轉換為Stirng* @param s1-數組* @param encode-字符集* @return*/public static String getString(byte[] s1,String encode){return getString(s1,encode,null);}//測試public static void main(String []args){System.err.println(isEq(new byte[]{1,2},new byte[]{1,2}));}/*** 字節數組轉16進制字符串* @param b* @return*/public static String byteArrToHexString(byte[] b){String result="";for (int i=0; i < b.length; i++) {result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring(1);}return result;}/*** 16進制字符創轉int* @param hexString* @return*/public static int hexStringToInt(String hexString){return Integer.parseInt(hexString,16);}/*** 十進制轉二進制* @param i* @return*/public static String intToBinary(int i){return Integer.toBinaryString(i);} }
android byte的使用就講完了
就這么簡單。
總結
以上是生活随笔為你收集整理的android byte的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android语言国际化values资源
- 下一篇: android 解决java.nio.B