androidbyte数组使用_android byte的用法
byte 為有符號數據,引用文章
android byte的使用
暴走鄰家 2018-01-24 08:55:07
10333
收藏 4
分類專欄: android Android基礎 文章標簽: android app java 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 eguid
eguid的官網:http://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的使用就講完了
就這么簡單。
總結
以上是生活随笔為你收集整理的androidbyte数组使用_android byte的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java.lang.IllegalArg
- 下一篇: python输入三行数据_3行Pytho