String与Blob互转 和 file文件与Blob互转

  • Post author:
  • Post category:其他


项目中使用大文本,或者是存文件可以使用Blob,这样方便存取,不影响现有的项目代码逻辑



Blob对字符串类型操作



String转换Blob

可以通过

SerialBlob

创建

Blob

对象,

SerialBlob

下有两个构造函数,如需创建

Blob

对象,可以使用

byte[]

类型,先把String转成byte[]再调用构造函数。

创建SerialBlob对象

String

byte

SerialBlob



String 转换为byte[]

/**
 * String 转 byte[]
 * @param str 请求进入字符串
 * @return 返回byte[] 数组
 * @throws Exception 抛出错误
 */
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[] 转为 SerialBlob

Blob blob=new SerialBlob(readStream(str))



Blob转换Sting

同理,

Blob

类型转换为

String

,就是反过来,先转换成

byte[]

,再转换成

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转Blob

可以把

File

文件先转换成

byte[]

,再通过

SerialBlob

对象创建



File转为byte[]



这个方法试试示例,可以去网上找一下File转换byte[]流的方法

//这个方法只是示例,不推荐这样使用
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[] 转为 SerialBlob

Blob blob=new SerialBlob(readStream(str))



Blob转File

可以通过

Blob

转成

InputStream

,再通过读取的方式转成

File

Blob

InputStream

File



Blob转InputStream

InputStream in = blob.getBinaryStream()



InputStream转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();
		}
	}
}



版权声明:本文为weixin_47416294原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。