杰瑞科技汇

Java中Blob如何高效转String?

Java中Blob转String的方法

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

Java中Blob如何高效转String?-图1
(图片来源网络,侵删)

方法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()
}

注意事项

  1. 字符集处理:转换时务必指定正确的字符集(如UTF-8),否则可能导致乱码
  2. 异常处理:实际应用中应添加适当的异常处理
  3. 大文件处理:对于非常大的Blob,方法1(使用流)更节省内存
  4. 关闭资源:确保关闭所有打开的流(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;
        }
    }
}

方法可以根据你的具体需求和环境选择使用。

分享:
扫描分享到社交APP
上一篇
下一篇