gpt4 book ai didi

java - 如果 blob 超过 2MB,getBlob() 会崩溃,substr 方法不起作用

转载 作者:行者123 更新时间:2023-11-30 02:09:55 26 4
gpt4 key购买 nike

我正在尝试使用 getBlob 方法将图片检索到 byte[]。

但是,如果 blob 超过 2MB,我注意到它会崩溃。

我发现一篇文章说使用 substr 函数来分段获取它,但这不起作用。

这是我的样本,非常粗糙。

                      if( size > 2000000 ) {
c = db.rawQuery("SELECT substr(PICTURE, 1, 1000000) FROM PICS WHERE ID = 1, null);
if( c.moveToFirst() ) {
byte[] image1, image2, image3, image4, image5;
image2 = c.getBlob(0);
c = db.rawQuery("SELECT substr(PICTURE, 1000001, 2000000) FROM PICS WHERE ID = 1, null);
if( c.moveToFirst() ) {
image3 = c.getBlob(0);
image4 = concatenateByteArrays(image2, image3);
c = db.rawQuery("SELECT substr(PICTURE, 2000001, 3000000) FROM PICS WHERE ID = 1, null);
if( c.moveToFirst() ) {
image5 = c.getBlob(0);
image1 = concatenateByteArrays(image4, image5);
ByteArrayInputStream inputStream = new ByteArrayInputStream(image1);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
image.setImageBitmap(bitmap);
}
}
}

如有任何帮助,我们将不胜感激。

谢谢。

最佳答案

这是一个很好的例子,展示了如何从 blob 列中读取数据

Class.forName("YOUR_DB_DRIER"); Connection conn = DriverManager.getConnection(url, username, password);

String sql = "SELECT name, description, image FROM pictures ";
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet resultSet = stmt.executeQuery();
while (resultSet.next()) {
String name = resultSet.getString(1);
String description = resultSet.getString(2);
File image = new File("D:\\java.gif");
FileOutputStream fos = new FileOutputStream(image);

byte[] buffer = new byte[512]; // as much as you increase this array
// it will increase the performance of you data reading.
InputStream is = resultSet.getBinaryStream(3);
while (is.read(buffer) > 0) {
fos.write(buffer);
}
fos.close();
}

关于java - 如果 blob 超过 2MB,getBlob() 会崩溃,substr 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30248759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com