java位元組轉換
Ⅰ 關於java流的問題,位元組流與字元流,為什麼要用轉換流,把位元組轉換成字元流,為什麼不直接用字元流
這是因為有一些時候系統給你提供的只有位元組流,比如說System.in標准輸入流。就是位元組流。你想從他那裡得哪旦到用戶在鍵盤上的輸入,只能陪掘是以轉換流將它轉換為Reader以方便自己的程序讀取輸入。再蘆緩核比如說Socket里的getInputStream()很明顯只給你提供位元組流,你要不行直接用,就得給他套個InputStreamReader()用來讀取。網路傳輸來的字元。希望能夠幫到你。
Ⅱ 關於java流的問題,位元組流與字元流,為什麼要用轉換流,把位元組轉換成字元流,為什麼不直接用字元流
你好,很高興為你解答。
正如你所說Java IO分兩種流 1)位元組流 InputStream OutputStream ;2)字元流 Reader Writer 。
為什麼需要用兩種流,而且要轉換,不直接用字元流。
簡單說來,就是字元流不能處理所有的情況,位元組流也不能處理所有的情況。所以需要兩種轉換。
先說一下二者的區別:
1)字元流處理的單元為2個位元組的Unicode字元,分別操作字元、字元賣肆數組或字元串,
2)而位元組流處理單元為1個位元組, 操作位元組和位元組數組。
位元組流可用於任何類型的對象,包括二進制對象,而字元流只能處理字元或者字元串; 位元組流提供了處理任何類型的IO操作的功能,但它不能直接處理Unicode字元,而友配鎮字元流就可以。
所以字元流是由Java虛擬機將位元組轉化為2個位元組的Unicode字元為單位的字元而成的,所以它對多好粗國語言支持性比較好!
如果是 音頻文件、圖片、歌曲,就用位元組流好點。
如果是關繫到中文(文本)的,用字元流好點。
Ⅲ java 中怎樣將 bytes 轉換為 long 類型
方法有以下三種:
1、不藉助其他任何已經有的類,直接進行轉換。
2、藉助java.nio.ByteBuffer實現,只要將byte[]轉換為ByteBuffer就可以實現所有primitive類型的數據讀取。
3、藉助java.io.DataInputStream實現,只要將byte[]轉換為DataInputStream就可以實現所有primitive類型的數據讀取。
Ⅳ java中byte怎樣轉換成byte
public class ByteUtil { /** * 將 Little-Endian 的位元組數組轉為 int 類型的數據 * Little-Endian 表示高位位元組在高位索引中 * @param bys 位元組數組 * @param start 需要轉換的開始索引位數 * @param len 需要轉換的位元組數量 * @return 指定開始位置和長度以 LE 方式表示的 int 數值 */ public static int bytes2IntLE(byte[] bys, int start, int len) { return bytes2Int(bys, start, len, false); } public static int bytes2IntLE(byte[] bys) { return bytes2Int(bys, 0, bys.length, false); } /** * 將 Big-Endian 的位元組數組轉為 int 類型的數據 * Big-Endian 表示高位位元組在低位索引中 * @param bys 位元組數組 * @param start 需要轉換的開始索引位數 * @param len 需要轉換的位元組數量 * @return 指定開始位置和長度以 BE 方式表示的 int 數值 */ public static int bytes2IntBE(byte[] bys, int start, int len) { return bytes2Int(bys, start, len, true); } public static int bytes2IntBE(byte[] bys) { return bytes2Int(bys, 0, bys.length, true); } /** * 將位元組數組轉為 Java 中的 int 數值 * @param bys 位元組數組 * @param start 需要轉換的起始索引點 * @param len 需要轉換的位元組長度 * @param isBigEndian 是否是 BE(true -- BE 序,false -- LE 序) * @return */ private static int bytes2Int(byte[] bys, int start, int len, boolean isBigEndian) { int n = 0; for(int i = start, k = start + len % (Integer.SIZE / Byte.SIZE + 1); i < k; i++) { n |= (bys[i] & 0xff) << ((isBigEndian ? (k - i - 1) : i) * Byte.SIZE); } return n; }}
Ⅳ java 怎麼將string轉換成byte
1.string 轉 byte[]
byte[] midbytes=isoString.getBytes("UTF8");
//為UTF8編碼
byte[] isoret = srt2.getBytes("ISO-8859-1");
//為ISO-8859-1編碼
其中ISO-8859-1為單位元組的編碼
2.byte[]轉string
String isoString = new String(bytes,"ISO-8859-1");
String srt2=new String(midbytes,"UTF-8");
說明:
在網路傳輸或其它應用中常常有同一的中間件,假設為String類型。因此需要把其它類型的數據轉換為中間件的類型。
將字元串進行網路傳輸時,如socket,需要將其在轉換為byte[]類型。這中間如果採用用不同的編碼可能會出現未成預料的問題,如亂碼。
下面舉個例子:
我們用socket傳輸String類型的數據時,常常用UTF-8進行編碼,這樣比較可以避免一個「中文亂碼」的問題。
發送端:
String sendString="發送數據";
byte[] sendBytes= sendString .getBytes("UTF8");
.......socket發送
接受端:
String recString=new String( sendBytes ,"UTF-8");
但是,這里往往又會出現這樣一個問題。就是想要發送的數據本身就是byte[]類型的。
如果將其通過UTF-8編碼轉換為中間件String類型就會出現問題
如:
byte[] bytes = new byte[] { 50, 0, -1, 28, -24 };
String sendString=new String( bytes ,"UTF-8");
byte[] sendBytes= sendString .getBytes("UTF8");
然後再發送
接受時進行逆向轉換
String recString=new String( sendBytes ,"UTF-8");
byte[] Mybytes=isoString.getBytes("UTF8");
這時Mybytes中的數據將是[50, 0, -17, -65, -67, 28, -17, -65, -67]
因此,需要採用單位元組的編碼方式進行轉換
String sendString=new String( bytes ,"UTF-8"); 改為 String sendString=new String( bytes , "ISO-8859-1" );
byte[] Mybytes=isoString.getBytes("UTF8"); 改為 byte[] Mybytes=isoString.getBytes( "ISO-8859-1" );
這樣所需要的位元組就有恢復了。
Ⅵ JAVA中怎麼將int數據轉換為byte數據
JAVA中根據以下代碼將int數據轉換為byte數據:
public static byte[] int32ToBytes(int val) {
int size = Integer.SIZE / Byte.SIZE;
byte[] ret = new byte[size];
for (int i = 0; i < size; ++i) {
ret[i] = (byte) (val << (8 * i) >> 56);
}
return ret;
}
(6)java位元組轉換擴展閱讀
Java也提供了一個byte數據類型,並且是基本類型。java byte是做為最小的數字來處理的,因此它的值域被定義為-128~127,也就是signed byte。
byte,即位元組,由8位的二進制組成。在Java中,byte類型的數據是8位帶符號的二進制數。在計算機中,8位帶符號二進制數的取值范圍是[-128, 127],所以在Java中,byte類型的取值范圍也是[-128, 127]。
運算規則:
####正數的最高位都是 0 ,正數的值就是二進製表示的值。 ####
####負數的最高位都是 1 ,負數的值是 取反後加一 然後加個負號得到得值。 ####