String與Blob互轉(zhuǎn)和file文件與Blob互轉(zhuǎn)方式
Blob對(duì)字符串類型操作
String轉(zhuǎn)換Blob
可以通過SerialBlob創(chuàng)建Blob對(duì)象,SerialBlob下有兩個(gè)構(gòu)造函數(shù),如需創(chuàng)建Blob對(duì)象,可以使用 byte[] 類型,先把String轉(zhuǎn)成byte[]再調(diào)用構(gòu)造函數(shù)。


String 轉(zhuǎn)換為byte[]
/**
* String 轉(zhuǎn) byte[]
* @param str 請(qǐng)求進(jìn)入字符串
* @return 返回byte[] 數(shù)組
* @throws Exception 拋出錯(cuò)誤
*/
public byte[] readStream(String str) throws Exception {
InputStream inStream=new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8));
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
outStream.close();
inStream.close();
return outStream.toByteArray();
}byte[] 轉(zhuǎn)為 SerialBlob
Blob blob=new SerialBlob(readStream(str))
Blob轉(zhuǎn)換Sting
同理,Blob類型轉(zhuǎn)換為String,就是反過來,先轉(zhuǎn)換成byte[],再轉(zhuǎn)換成String。
private String blobToString(Blob blob) throws Exception {
InputStream inStream=blob.getBinaryStream();
StringBuffer stringBuffer=new StringBuffer();
try {
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
String str=new String(buffer, 0, len);
stringBuffer.append(str);
}
}catch (Exception e){
throw e;
}finally {
if(inStream!=null){
inStream.close();
}
if(stringBuffer.length()>0){
return stringBuffer.toString();
}else{
return null;
}
}
}File轉(zhuǎn)Blob
可以把File文件先轉(zhuǎn)換成byte[],再通過SerialBlob對(duì)象創(chuàng)建
File轉(zhuǎn)為byte[]
這個(gè)方法試試示例,可以去網(wǎng)上找一下File轉(zhuǎn)換byte[]流的方法
//這個(gè)方法只是示例,不推薦這樣使用
public static byte[] getFileByte(File file) throws Exception {
byte[] data = null;
InputStream in = new FileInputStream(file);
data = new byte[in.available()];
in.read(data);
in.close();
return data;
}byte[] 轉(zhuǎn)為 SerialBlob
Blob blob=new SerialBlob(readStream(str))
Blob轉(zhuǎn)File
可以通過Blob轉(zhuǎn)成InputStream,再通過讀取的方式轉(zhuǎn)成File

Blob轉(zhuǎn)InputStream
InputStream in = blob.getBinaryStream()
InputStream轉(zhuǎn)File
public void blobToFile(Blob blob,File file) throws Exception {
InputStream inStream=null;
OutputStream outStream=null;
try {
outStream = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[2048];
while ((bytesRead = inStream.read(buffer, 0, 2048)) != -1) {
outStream.write(buffer, 0, bytesRead);
}
}catch (Exception e){
throw new Exception(e);
}finally {
if(outStream!=null){
outStream.close();
}
if(inStream!=null){
inStream.close();
}
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java多線程CountDownLatch的實(shí)現(xiàn)
本文主要介紹了Java多線程CountDownLatch的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
Java之JFrame輸出Helloworld實(shí)例
這篇文章主要介紹了Java之JFrame輸出Helloworld的方法,以輸出Helloworld的實(shí)例分析了JFrame的簡單入門技巧,需要的朋友可以參考下2015-02-02
java中用數(shù)組實(shí)現(xiàn)環(huán)形隊(duì)列的示例代碼
這篇文章主要介紹了java中用數(shù)組實(shí)現(xiàn)環(huán)形隊(duì)列的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
解決springboot文件配置端口不起作用(默認(rèn)8080)
這篇文章主要介紹了解決springboot文件配置端口不起作用(默認(rèn)8080),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
JVM內(nèi)存結(jié)構(gòu)相關(guān)知識(shí)解析
這篇文章主要介紹了JVM內(nèi)存結(jié)構(gòu)相關(guān)知識(shí)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
java使用wait和notify實(shí)現(xiàn)線程通信
這篇文章主要為大家詳細(xì)介紹了java如何使用wait和notify實(shí)現(xiàn)線程之間通信,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10

