开发者社区 问答 正文

分别数据库和java的两个小问题:报错

1.想要验证两个文件名不同但是内容相同的文件是否相等该用java怎样做?

更具体一点的话是验证两张图片是否相同

2.写程序读取文件等IO操作爱用

1024 , 2048 , 4096这样的数字,在创建数据库字段的时候是否用类似的2的次方会比相反更有效率或者其他的优势?

例如 会否 varchar 字段的长度设为 99 相比之下抛除需求的因素设置为128会更为好一些?

展开
收起
kun坤 2020-06-14 09:50:34 401 分享 版权
阿里云 AI 助理回答
  1. 在Java中验证两个文件内容是否相同,即使文件名不同,可以通过读取并比较文件的字节流来实现。对于图片这类二进制文件,可以使用以下步骤:
import java.io.*;

public class FileCompare {
    public static boolean areFilesEqual(File file1, File file2) throws IOException {
        if (file1.length() != file2.length()) {
            return false; // 文件大小不等,则内容肯定不等
        }

        try (InputStream stream1 = new FileInputStream(file1);
             InputStream stream2 = new FileInputStream(file2)) {

            byte[] buffer1 = new byte[1024];
            byte[] buffer2 = new byte[1024];
            int read1, read2;

            while ((read1 = stream1.read(buffer1)) != -1 && (read2 = stream2.read(buffer2)) != -1) {
                if (read1 != read2 || !Arrays.equals(buffer1, buffer2)) {
                    return false;
                }
            }
            return true;
        }
    }

    public static void main(String[] args) {
        File fileA = new File("path/to/image1.jpg");
        File fileB = new File("path/to/image2.jpg");

        try {
            if (areFilesEqual(fileA, fileB)) {
                System.out.println("两张图片内容相同。");
            } else {
                System.out.println("两张图片内容不同。");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这段代码首先检查两个文件的大小,如果大小不同则直接判断内容不相等。然后逐块读取文件内容进行比较,直到文件结束。

  1. 对于数据库字段长度设置的问题,选择2的次方数(如128、256等)主要是基于性能和存储效率的考虑。在某些数据库系统中,内部存储可能会对特定大小的数据块进行优化,尤其是当涉及到内存分配和数据对齐时。例如,如果一个字段被设计为固定长度,并且长度是2的幂,那么在处理这些数据时可能会更高效,因为这通常与计算机底层的存储和寻址方式更为契合。

对于VARCHAR字段,虽然它是一个可变长度的字符串类型,但指定长度为2的次方(如128)而不是任意值(如99),理论上可能不会直接影响查询性能,但在某些数据库管理系统中,可能会有微小的存储空间优化,因为内部存储管理可能会倾向于对齐到特定的边界上。

然而,最重要的是根据实际需求来设定字段长度。过度预设过大的长度会浪费存储空间,而设置得太紧又可能导致数据截断或存储失败。因此,在抛除需求因素外单纯追求2的次方长度并不总是最佳实践,应优先确保字段能够满足业务需求并保持存储效率。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答