java - 如何在JAVA中将附件对象转换为ByteArray

标签 java serialization cxf deserialization multipart

我正在使用 Apache CXF 在 JAVA 中编写 Web 服务。

所以,我有一个方法,其原型(prototype)如下:

public Response upload(@Multipart("id") int Id, 
            @Multipart("file") Attachment attachment) {

现在,我想将此附件转换为 byte[] 。我该怎么做?

最佳答案

以下是读取附件内容并将其存储在字节数组中的方法。或者,您可以直接写入 OutputStream 并跳过到 byte[] 的转换。

        DataHandler dataHandler = attachment.getDataHandler();
        final byte[] data;
        try (InputStream inputStream = dataHandler.getInputStream()) {
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            final byte[] buffer = new byte[4096];
            for (int read = inputStream.read(buffer); read > 0; read = inputStream.read(buffer)) {
                outputStream.write(buffer, 0, read);
            }
            data = outputStream.toByteArray();
        }

        //todo write data to BLOB

如果您希望提高内存效率,或者附件无法放入内存,则可以直接写入 blob 的输出流。只需将 ByteArrayOutputStream 替换为 OutputStream outputStream = blob.setBinaryStream(1);

关于java - 如何在JAVA中将附件对象转换为ByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39601003/

相关文章:

java - Apache CXF 依赖项

java - 带有 UsernameToken 和 SecurityContextToken 的 SOAP 安全 header - CXF

java - 使用 selenium webdriver 下载文件夹中的文件

java - 为什么在 Google App Engine 上运行的进程会挂起?

java - 将 FileWriter 作为参数传递给方法

java - 什么是 setElementConverter 以及它在 Selenium WebDriver 中如何工作?

c++ - 序列化结构的 STL 映射

java - EJB 和 CDI bean 序列化的最佳实践

java - 在自定义序列化程序 jackson 中配置 objectmapper?

java - 如何在未来取消时终止 Callable 中的 CXF Web 服务调用