是否可以直接从 Encoded String 中获取 java 对象,而不是将 Encoded String 转换为 File 然后读取文件?

问题描述

我的要求:

  1. 我从我的 REST Api 之一接收编码字符串现在需要使用 Base64 解码器解码此编码字符串。
  2. 因为这包含我需要像 Base64 一样解码到文件文件,这可以使用下面的链接发生,如果我只是将编码字符串下面的粘贴复制到下面的链接中,它会给我下载文件
  3. https://base64.guru/converter/decode/file
  4. 现在我的问题是,是否可以以某种方式直接将下面编码的字符串转换为 Java 对象,而不是将它们转换为文件
  • 我的最终目标是从编码字符串中获取数据。

-----现在的流程是-----

EncodedString ==> 将 Base 64 转换为 CSV 文件并下载文件 ==> 使用 Java 读取 CSV 文件 ==>> Java 对象中可用的数据

----以下可以吗?-------

EncodedString ==> 将文件解码并转换为 Java 对象 ==>> Java 对象中可用的数据

编码字符串:

我所尝试的

package com.oracleerp;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;

public class Zip {

    public static void main(String args[]) throws IOException {

        convertZipAndDownload();
    }

    private static void convertZipAndDownload() throws IOException {
        try {
            String str1 = "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";
            byte[] decodedImg = Base64.getDecoder().decode(str1.getBytes(StandardCharsets.UTF_8));
            Path destinationFile = Paths.get("/Users/as.asd/Documents/zip","myImage1.zip");
            Files.write(destinationFile,decodedImg);
        } catch (Exception e) {
            System.out.println("Error :" + e.getMessage());
        }
    }
}

这可以很好地下载 zip,但我想在内存中完成所有这些操作而不做任何下载

解决方法

是的,您可以像这样使用 java.util.Base64 在 Java 中轻松地将 Base64 数据解码为 byte[]

String myBase64String = ...;
byte[] decoded = Base64.getDecoder().decode(myBase64String);

请注意,您可能需要将 getDecoder() 替换为 getMimeDecoder()getUrlDecoder(),具体取决于您的字符串使用的 Base64 编码类型。

然后,如果您需要某种需要该数据作为输入的处理,您可以轻松创建一个 InputStream,使用 ByteArrayInputStream 提供该数据:

InputStream in = new ByteArrayInputStream(decoded);

但是,如果您的处理代码坚持采用 File 对象,那么您需要修改该代码以直接接受 InputStream(通常这很容易,因为大多数这些方法只是创建一个 FileInputStream 并阅读它,只需跳过该步骤并使用传入的 InputStream 代替)。