java二進制緩存
① java中二進制流的概念
字元流是為字元設計的,對位元組流進行包裝
因為一個字元有可能佔用多個位元組的
例如UTF-8編碼下,對中文漢字的長度是變長的(2-4個位元組),各種編碼長度都不一樣
那如果你用位元組流讀取的話,那你還要去一個個的轉換,這中間就很多問題了
因此就有了字元流,幫你完成了一系列的位元組轉換...
純手工的,請~~哈.
② java的數字二進制輸出
要是我肯定先嘗試一下,二進制以B開頭,那就b代表下看咯,不行再去查。
事實也證明是不行的,查了一下,還真沒有二進制的輸出形式。
Integer 類倒是有相應的方法:
static StringtoBinaryString(int i)
以二進制(基數 2)無符號整數形式返回一個整數參數的字元串表示形式。
System.out.print(Integer.toBinaryString(x));
③ java實現解析二進制文件
/**
*
*/
package com.igen.case10;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
/**
*
* @ClassName Case10
* @Description TODO
*
* @author wjggwm
* @data 2017年2月7日 上午11:46:25
*/
public class Case10 {
static final String fileName = "/test.png";
static final String filePath = "D:/files/case10";
static final String sourceFileName = "binary";
public static void main(String[] args) {
try {
readFile(Case10.class.getResource(sourceFileName).toURI().getPath());
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
/**
*
* @Description 解析二進制文件
* @param sourceFileName
*
* @author wjggwm
* @data 2017年2月7日 上午11:47:12
*/
public static void readFile(String sourceFileName) {
InputStream in = null;
try {
in = new FileInputStream(sourceFileName);
// 讀取字元串數據長度位元組
byte[] txtLenByte = new byte[2];
in.read(txtLenByte);
int txtlen = byte2ToUnsignedShort(txtLenByte, 0);
// 讀取字元串位元組
byte[] txtByte = new byte[txtlen];
in.read(txtByte);
//字元串為UTF-8編碼
String txt = new String(txtByte, "UTF-8");
// 輸出字元串
System.out.println(txt);
// 讀取圖片數據長度
byte[] imgLenByte = new byte[4];
in.read(imgLenByte);
int imgLen = byte4ToInt(imgLenByte, 0);
// 讀取圖片數據
byte[] img = new byte[imgLen];
in.read(img);
// 生成圖片文件
saveToImgByBytes(filePath, fileName, img);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
*
* @Description 將位元組寫入文件
* @param imgName
* @param imgByte
*
* @author wjggwm
* @data 2017年2月7日 上午11:07:45
*/
public static void saveToImgByBytes(String filePath, String imgName, byte[] imgByte) {
try {
File dic = new File(filePath);
if (!dic.exists()) {
dic.mkdirs();
}
File image = new File(filePath + imgName);
if (!image.exists()) {
image.createNewFile();
}
FileOutputStream fos = new FileOutputStream(image);
fos.write(imgByte);
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @Description byte數組轉換為無符號short整數
* @param bytes
* @param off
* @return
*
* @author wjggwm
* @data 2017年2月7日 上午11:05:58
*/
public static int byte2ToUnsignedShort(byte[] bytes, int off) {
// 注意高位在後面,即大小端問題
int low = bytes[off];
int high = bytes[off + 1];
return (high << 8 & 0xFF00) | (low & 0xFF);
}
/**
*
* @Description byte數組轉換為int整數
* @param bytes
* @param off
* @return
*
* @author wjggwm
* @data 2017年2月7日 上午11:07:23
*/
public static int byte4ToInt(byte[] bytes, int off) {
// 注意高位在後面,即大小端問題
int b3 = bytes[off] & 0xFF;
int b2 = bytes[off + 1] & 0xFF;
int b1 = bytes[off + 2] & 0xFF;
int b0 = bytes[off + 3] & 0xFF;
return (b0 << 24) | (b1 << 16) | (b2 << 8) | b3;
}
}
④ java怎麼實現讀取一個文件,拿到二進制流
InputStream 就是讀取二進制文件的, 任何文件都可以用這個流來讀, 也叫位元組輸入流
⑤ java 如何顯示 二進制
java顯示二進制,主要是使用基本類型的包裝類的tobinaryString類型進行轉換,代碼如下:
packagecom.qiu.lin.he;
importjava.text.ParseException;
publicclassCeshi{
publicstaticvoidmain(String[]args)throwsParseException{
inti=8;
//使用包裝類的toBinaryString轉換成二進制
System.out.println(Integer.toBinaryString(i));
}
}
運行結果如下
⑥ java 裡面怎麼使用二進制數組二進制數組都有一些什麼操作或者方法謝謝!
1、沒有二進制數組這個概念
2、如果想存儲二進制的數據可以使用boolean型數組,或byte[]、int[]都可以只是空間使用的差別。
byte[] data={1,0};
boolean[] b= {true,false};
3、或者你可以封裝一個BiteArray類,來完成二進制數數組,這個方法就你自己定義了,你想讓它有什麼功能,他就又什麼功能。
4、至於後面一個問題,就是要看你自己怎麼擴展了,基本的數組操作或者其他你附加的一些方法。
⑦ JAVA二進制流的問題
BufferedWriter類的write(int c)方法是寫入單個字元,雖然參數是32位的int,但是如果超過16位將會發生截斷,也就是把低16位的值所表示的字元寫到輸出流,例子中的100000000的低16位是1110000100000000,正好就是57600,然後就到文件結尾返回-1
⑧ java 將文件(如zip、txt等)轉換成二進制數據並列印出來
可以通過BufferedReader 流的形式進行流緩存,之後通過read(位元組流)方法獲取到緩存的內容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此時獲取到的bre就是整個文件的緩存流
byte[] b = new byte[1024];
int len = 0;
while((len=bre .read(b))!=-1){//判斷是不是到最後一個位元組
System.out.println(new String(b,0,len));//輸出二進制內容
}
bre.close();//關閉流
備註: 流用完之後必須close掉,如上面的就應該是:bre.close(),否則bre流會一直存在,直到程序運行結束。
⑨ java如何處理一個二進制流
二進制流保存時是以位元組方式的例如 0xff 等將位元組保存入byte數組即可
⑩ Java:關於java的二進制與運算,下面的過程是怎麼實現的呢
你是想判斷每一位是否是1對吧,其實你可以把&某種程度看成乘法(兩個二進制數對應的位相乘,都是1則為1,有一個為0就是0),如果你想判斷一個數的二進制哪個位置上是否是1,那麼你就選定那個位置為1的那個數和這個數&連接,如
你想判斷14第二位是否是1,只需用14和這10(3)這個二進制用&連接看是否等於0,想看第三位是否是1,就用14和100這個二進制數用&連接看結果是否是0