Java中Blob转String的方法
在Java中,将Blob(Binary Large Object)转换为String主要有以下几种方法:

方法1:使用Blob的getBinaryStream()方法
import java.sql.Blob;
import java.io.InputStream;
import java.io.ByteArrayOutputStream;
public String blobToString(Blob blob) throws Exception {
if (blob == null) {
return null;
}
InputStream inputStream = blob.getBinaryStream();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
return outputStream.toString("UTF-8"); // 指定字符集
}
方法2:使用Blob.getBytes()方法
import java.sql.Blob;
public String blobToString(Blob blob) throws Exception {
if (blob == null) {
return null;
}
byte[] bytes = blob.getBytes(1, (int) blob.length());
return new String(bytes, "UTF-8"); // 指定字符集
}
方法3:使用Java 8的Stream API (Java 8及以上)
import java.sql.Blob;
import java.io.ByteArrayInputStream;
public String blobToString(Blob blob) throws Exception {
if (blob == null) {
return null;
}
byte[] bytes = blob.getBytes(1, (int) blob.length());
return new ByteArrayInputStream(bytes).readAllBytes()
.toString("UTF-8"); // Java 11+的readAllBytes()
}
注意事项
- 字符集处理:转换时务必指定正确的字符集(如UTF-8),否则可能导致乱码
- 异常处理:实际应用中应添加适当的异常处理
- 大文件处理:对于非常大的Blob,方法1(使用流)更节省内存
- 关闭资源:确保关闭所有打开的流(InputStream等)
完整示例
import java.sql.Blob;
import java.io.InputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.sql.SQLException;
public class BlobConverter {
public static String blobToString(Blob blob) {
if (blob == null) {
return null;
}
try (InputStream inputStream = blob.getBinaryStream();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
return outputStream.toString("UTF-8");
} catch (SQLException | IOException e) {
e.printStackTrace();
return null;
}
}
}
方法可以根据你的具体需求和环境选择使用。
