Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将图像存储在字节数组和二进制(BLOB)中的区别以及哪个更快_Java_Sql Server_Jdbc_Byte_Blob - Fatal编程技术网

Java 将图像存储在字节数组和二进制(BLOB)中的区别以及哪个更快

Java 将图像存储在字节数组和二进制(BLOB)中的区别以及哪个更快,java,sql-server,jdbc,byte,blob,Java,Sql Server,Jdbc,Byte,Blob,我想在jdbc中插入和选择sql server中的图像。我不知道BLOB和byte是相同的还是不同的。我在代码中使用了Blob,应用程序加载速度很慢,因为它必须选择Blob中存储的图像并逐像素转换。我想使用字节数组,但我不知道它们是相同的还是不同的。我的主要目标是更快地加载图像。 谢谢在继续之前,我们可能需要记住关于位、字节和二进制、BLOB的基本概念 位:二进制数字的缩写。它是最小的存储单元。位的值可以是0或1 字节:通常使用的第二小存储器(由于不是很常用的术语,所以未提及半字节)。它包括八位

我想在jdbc中插入和选择sql server中的图像。我不知道BLOB和byte是相同的还是不同的。我在代码中使用了Blob,应用程序加载速度很慢,因为它必须选择Blob中存储的图像并逐像素转换。我想使用字节数组,但我不知道它们是相同的还是不同的。我的主要目标是更快地加载图像。
谢谢

在继续之前,我们可能需要记住关于位、字节和二进制、BLOB的基本概念

位:二进制数字的缩写。它是最小的存储单元。位的值可以是0或1

字节:通常使用的第二小存储器(由于不是很常用的术语,所以未提及半字节)。它包括八位

二进制:实际上,它是一种编号方案,数字的每个数字都可以取0或1的值

BLOB:存储在数据库中的一组二进制数据。此外,还包括存储二进制数据的列的类型

总结一下定义:二进制格式是一种包含位的方案

为了使其更具体,我们可以使用下面的代码观察结果

import java.nio.ByteBuffer;

public class TestByteAndBinary{

     public static void main(String []args){
        String s = "test"; //a string, series of chars
        System.out.println(s);

        System.out.println();

        byte[] bytes = s.getBytes(); //since each char has a size of 1 byte, we will have an array which has 4 elements
        for(byte b : bytes){
            System.out.println(b);
        } 

        System.out.println();

        for(byte b : bytes){
            String c = String.format("%8s", Integer.toBinaryString(b)).replace(' ', '0'); //each element is printed in its binary format
            System.out.println(c);
        }
     }
}
输出:

$javac TestByteAndBinary.java
$java -Xmx128M -Xms16M TestByteAndBinary
test

116
101
115
116

01110100
01100101
01110011
01110100
让我们回到问题上来: 如果确实要在数据库中存储图像,则必须使用BLOB类型

但是!这不是最佳做法。

  • 因为数据库是用来存储数据的,而文件系统是用来存储数据的 设计用于存储文件

  • 从磁盘读取图像是一件简单的事情。但是从中读取图像 数据库需要更多的时间来完成(查询数据, 转换为数组,反之亦然)

  • 读取图像时,会导致数据库受损 因为它不是简单的文本或数字读取,所以性能较低

  • 图像文件不能从数据库的特性(如索引)中获益

此时,最好将该图像存储在服务器上,并将其路径存储在数据库中。

据我所知,在企业级项目中,图像很少存储在数据库中。这种情况下,这些图像需要加密存储,因为它们包含非常感性的数据。根据我的拙见,即使在这种情况下,这些数据也不必存储在数据库中。

Blob的简单含义是(二进制大对象)及其数据库存储字节数组的方式


希望这很简单,它能回答您的问题。

在不使用BLOB(二进制大对象)的情况下,如何在数据库中存储
字节[]
。这是SQL存储字节数组的方式。-最好使用BLOB字节数组。ByteArrayInputStrean-ImageIO.read。这不应该造成任何问题。(虽然我更喜欢文件系统上的文件。)我想知道字节和二进制之间是否有区别。字节是二进制的八位。在这种情况下,它们实际上是相同的。您清楚地回答了二进制的含义。。。