精华内容
下载资源
问答
  • 2021-03-05 12:45:38

    我试图将一个字节数组转换为ZIP文件.我使用以下代码获取字节:

    byte[] originalContentBytes= new Verification().readBytesFromAFile(new File("E://file.zip"));

    private byte[] readBytesFromAFile(File file) {

    int start = 0;

    int length = 1024;

    int offset = -1;

    byte[] buffer = new byte[length];

    try {

    //convert the file content into a byte array

    FileInputStream fileInuptStream = new FileInputStream(file);

    BufferedInputStream bufferedInputStream = new BufferedInputStream(

    fileInuptStream);

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    while ((offset = bufferedInputStream.read(buffer, start, length)) != -1) {

    byteArrayOutputStream.write(buffer, start, offset);

    }

    bufferedInputStream.close();

    byteArrayOutputStream.flush();

    buffer = byteArrayOutputStream.toByteArray();

    byteArrayOutputStream.close();

    } catch (FileNotFoundException fileNotFoundException) {

    fileNotFoundException.printStackTrace();

    } catch (IOException ioException) {

    ioException.printStackTrace();

    }

    return buffer;

    }

    但我现在的问题是将字节数组转换回ZIP文件 – 如何才能完成?

    注意:指定的ZIP包含两个文件.

    更多相关内容
  • 今天,项目现场提出这样一种需求:项目中,将项目文件zip包进行发布时,由于安全机制的限制,不允许发布二进制文件,因此需要将.zip格式的二进制文件encode成文本文件,再将文本文件上传后decode.zip格式。...

    一、说明

    今天,项目现场提出这样一种需求:项目中,将项目文件打成zip包进行发布时,由于安全机制的限制,不允许发布二进制文件,因此需要将.zip格式的二进制文件encode成文本文件,再将文本文件上传后decode成.zip格式。

    二、直接上代码

    1、首先上传统IO实现方式

    package com.mzj.pe.codec;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /**
     * @Auther: mazhongjia
     * @Date: 2020/9/17 11:26
     * @Version: 1.0
     */
    public interface BinaryTextCodec {
    
        String encode(FileInputStream fileInputStream) throws IOException;
    
        void decode(FileOutputStream outputStream, String text) throws IOException;
    
        public static BinaryTextCodec createBinaryTextCodec(){
            return new BinaryTextCodecImpl();
        }
    }
    
    package com..mzj.pe.codec;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /**
     * @Auther: mazhongjia
     * @Date: 2020/9/17 11:28
     * @Version: 1.0
     */
    public class BinaryTextCodecImpl implements BinaryTextCodec {
    
        private static final String TEXT_SPLIT_CHAR = ",";
    
        @Override
        public String encode(FileInputStream fileInputStream) throws IOException {
            if (fileInputStream == null) {
                return null;
            }
            StringBuilder builder = new StringBuilder();
            int i = 0;
            while ((i = fileInputStream.read()) != -1) {
                builder.append(i + TEXT_SPLIT_CHAR);
            }
            return builder.toString();
        }
    
        @Override
        public void decode(FileOutputStream fileOutputStream, String text) throws IOException {
            if (fileOutputStream == null || text == null) {
                return;
            }
            String[] lineone = text.split(TEXT_SPLIT_CHAR);
    
            for (int j = 0; j < lineone.length; j++) {
                fileOutputStream.write(Integer.valueOf(lineone[j]));
            }
            fileOutputStream.flush();
        }
    
    
    }
    
    package com.mzj.pe.codec;
    
    import java.io.*;
    
    /**
     * @Auther: mazhongjia
     * @Date: 2020/9/17 13:55
     * @Version: 1.0
     */
    public class FileTransitionUtil {
    
        private static BinaryTextCodec binaryTextCodec = BinaryTextCodec.createBinaryTextCodec();
    
        public static void binaryToText(String binaryFilePath, String textFilePath) throws IOException {
            File binaryFile = new File(binaryFilePath);
            if (!binaryFile.exists()) {
                System.out.println("转换的二进制文件不存在....");
                return;
            }
            File textFile = new File(textFilePath);
            if (!textFile.exists())
                textFile.createNewFile();
    
            FileInputStream fileInputStream = null;
            BufferedWriter bufferedWriter = null;
    
            try {
                fileInputStream = new FileInputStream(binaryFile);
                bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(textFile)));
    
                String encoder = binaryTextCodec.encode(fileInputStream);
                if (encoder != null) {
                    bufferedWriter.write(encoder);
                    bufferedWriter.flush();
                    System.out.println("成功将【"+binaryFilePath+"】转换成文本文件【"+textFilePath+"】");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (fileInputStream != null) {
                    try {
                        fileInputStream.close();
                    } catch (IOException ie) {
                        ie.printStackTrace();
                    }
                }
                if (bufferedWriter != null) {
                    try {
                        bufferedWriter.close();
                    } catch (IOException ie) {
                        ie.printStackTrace();
                    }
                }
            }
        }
    
    
        public static void textToBinary(String binaryFilePath, String textFilePath) throws IOException {
            File textFile = new File(textFilePath);
            if (!textFile.exists()) {
                System.out.println("转换的文本文件不存在....");
                return;
            }
            File binaryFile = new File(binaryFilePath);
            if (!binaryFile.exists())
                binaryFile.createNewFile();
    
            FileOutputStream fileOutputStream = null;
            BufferedReader bufferedReader = null;
    
            try {
                fileOutputStream = new FileOutputStream(binaryFile);
                bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(textFile)));
    
                binaryTextCodec.decode(fileOutputStream, bufferedReader.readLine());
                System.out.println("成功将【"+textFilePath+"】转换成二进制文件【"+binaryFilePath+"】");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (fileOutputStream != null) {
                    try {
                        fileOutputStream.close();
                    } catch (IOException ie) {
                        ie.printStackTrace();
                    }
                }
                if (bufferedReader != null) {
                    try {
                        bufferedReader.close();
                    } catch (IOException ie) {
                        ie.printStackTrace();
                    }
                }
            }
        }
    }
    
    package com.mzj.pe.codec;
    
    import java.io.IOException;
    
    /**
     * @Auther: mazhongjia
     * @Date: 2020/9/17 14:15
     * @Version: 1.0
     */
    public class Demo {
    
        public static void main(String[] args) throws IOException {
            FileTransitionUtil.binaryToText("D:\\埃及项目画面说明.doc","D:\\1.txt");
            FileTransitionUtil.textToBinary("D:\\1.doc","D:\\1.txt");
    
            FileTransitionUtil.binaryToText("D:\\专题图演示视频.mp4","D:\\2.txt");
            FileTransitionUtil.textToBinary("D:\\2.mp4","D:\\2.txt");
    
            FileTransitionUtil.binaryToText("D:\\17年餐费未报销.zip","D:\\3.txt");
            FileTransitionUtil.textToBinary("D:\\3.zip","D:\\3.txt");
    
    
        }
    }
    

    2、然后我自己又用NIO实现了一版

    package com.mzj.pe.codec.test;
    
    import java.nio.ByteBuffer;
    import java.nio.CharBuffer;
    import java.nio.channels.FileChannel;
    import java.nio.charset.Charset;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.StandardOpenOption;
    
    /**
     * @Auther: mazhongjia
     * @Date: 2020/9/17 14:57
     * @Version: 1.0
     */
    public class Text {
    
        public static void main(String[] args) throws Exception {
    
            Path pathIn = Paths.get("D://原始二进制文件.zip");
            Path pathOut = Paths.get("D://1.txt");
    
            FileChannel inputChannel = FileChannel.open(pathIn, StandardOpenOption.READ);
            FileChannel outputChannel =FileChannel.open(pathOut,StandardOpenOption.WRITE);
    
            ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
    
            while (true){
                byteBuffer.clear();
    
                int read = inputChannel.read(byteBuffer);
                if(-1 == read){//此处用-1判断是否读完需要依赖上面的 byteBuffer.clear();
                    //文件读完了
                    break;
                }
    
                //读到文件中内容了,翻转缓冲区,准备get其中数据
                byteBuffer.flip();//本例中从ByteBuffer获取数据没有显示的get,而是将其作为参数传给另一个Channel的write方法,但是也是读其中的数据,所以也要进行翻转
    
                StringBuilder builder = new StringBuilder();
                while (byteBuffer.hasRemaining()){
                    builder.append(byteBuffer.get()+",");//1、将bytebuffer中数据,以字节形式取出,每个字节后追加逗号,形成字符串,以便解析字符串时时按,分割还原字节
                }
    
                CharBuffer charBuffer = CharBuffer.allocate(builder.length());//2、定义一个上面生成字符串长度的ChatBuffer
    
                charBuffer.put(builder.toString());//3、将字符串写入CharBuffer(A,B,C,D....)
                charBuffer.flip();
    
                Charset charset= Charset.defaultCharset();//4、将CharBuffer数据准备写入outputChannel,写入之前,需要转换成ByteBuffer,转换时需要按照特定字符集编码形式进行转换
                ByteBuffer byteBuffe1r=charset.encode(charBuffer);
    //            byteBuffe1r.flip();
                outputChannel.write(byteBuffe1r);//将byteBuffer中内容写入到Channel中//5、将CharBuffer的ByteBuffer数组写入outputChannel
    
    //            outputChannel.write(byteTemp);//将byteBuffer中内容写入到Channel中
            }
    
            inputChannel.close();
            outputChannel.close();
        }
    }
    
    
    package com.mzj.pe.codec.test;
    
    import java.nio.ByteBuffer;
    import java.nio.CharBuffer;
    import java.nio.channels.FileChannel;
    import java.nio.charset.Charset;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.StandardOpenOption;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @Auther: mazhongjia
     * @Date: 2020/9/17 14:57
     * @Version: 1.0
     */
    public class Text2 {
    
        public static void main(String[] args) throws Exception {
    
            Path pathIn = Paths.get("D://1.txt");
            Path pathOut = Paths.get("D://1.zip");
    
            FileChannel inputChannel = FileChannel.open(pathIn, StandardOpenOption.READ);
            FileChannel outputChannel =FileChannel.open(pathOut,StandardOpenOption.WRITE);
    
            ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
            List<Byte> byteList = new ArrayList<>();
            while (true){
                byteBuffer.clear();
    
                int read = inputChannel.read(byteBuffer);
                if(-1 == read){//此处用-1判断是否读完需要依赖上面的 byteBuffer.clear();
                    //文件读完了
                    break;
                }
    
                //读到文件中内容了,翻转缓冲区,准备get其中数据
                byteBuffer.flip();//本例中从ByteBuffer获取数据没有显示的get,而是将其作为参数传给另一个Channel的write方法,但是也是读其中的数据,所以也要进行翻转
    
                while(byteBuffer.hasRemaining()){
                    byteList.add(byteBuffer.get());
                }
            }
            byte[] bytes = new byte[byteList.size()];
            for (int ii=0;ii<bytes.length;ii++){
                bytes[ii] = byteList.get(ii);
            }
    
            //1、这里的data,是A,B,C...的字符串形式,也就是原始二进制文件的byte数组的字符串逗号分割形式
            String data = new String(bytes,Charset.defaultCharset());//这一步是通过文本的字节数组形式,获取文本内容//2、将文本文件中字节还原成A,B,C,....形式,这里相当于decode,解码字符集要与编码保持一致
    
            //3、下面是还原原二进制文件的字节数组:byte2s
            String[] dataspliet = data.split(",");
            byte[] byte2s = new byte[dataspliet.length];
    
            for (int ii=0;ii<byte2s.length;ii++){
                byte2s[ii] = Byte.valueOf(dataspliet[ii]);
            }
    
            //4、下面是根据原二进制文件字节数组封装ByteBuffer
            ByteBuffer byteBufferWrite = ByteBuffer.allocate(byte2s.length);
    
            byteBufferWrite.put(byte2s);
    
            byteBufferWrite.flip();
            //5、将字节数组写入outputChannel
            outputChannel.write(byteBufferWrite);//将byteBuffer中内容写入到Channel中
    
    //            outputChannel.write(byteTemp);//将byteBuffer中内容写入到Channel中
    
            inputChannel.close();
            outputChannel.close();
        }
    }
    
    

     

    展开全文
  • Java实现字节流与图片的转化
  • java文件转化为字节数组

    千次阅读 2019-12-12 17:29:55
    * 将文件转化为字节数组 * @param filePath * @return * @throws IOException */ public byte[] toByteArray(String filePath) throws IOException { InputStream inputStream = new FileInputStream(fil...
     /**
      * 将文件转化为字节数组
      * @param filePath
      * @return
      * @throws IOException
      */
     public byte[] toByteArray(String filePath) throws IOException {
         InputStream inputStream = new FileInputStream(filePath);
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         byte[] bytes = new byte[1024 * 4];
         int n = 0;
         while ((n = inputStream.read(bytes)) != -1) {
             baos.write(bytes, 0, n);
         }
         inputStream.close();
         return baos.toByteArray();
     }
    
    展开全文
  • Java 二进制数据转成文件

    千次阅读 2021-02-12 15:46:50
    importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.ByteArrayInputStream;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importorg.slf4j.Logg...

    importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.ByteArrayInputStream;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;public classFileUtils {private static Logger logger = LoggerFactory.getLogger(FileUtils.class);/*** @Title: byteToFile

    * @Description: 把二进制数据转成指定后缀名的文件,例如PDF,PNG等

    *@paramcontents 二进制数据

    *@paramfilePath 文件存放目录,包括文件名及其后缀,如D:\file\bike.jpg

    * @Author: Wiener

    * @Time: 2018-08-26 08:43:36*/

    public static void byteToFile(byte[] contents, String filePath) {

    BufferedInputStream bis= null;

    FileOutputStream fos= null;

    BufferedOutputStream output= null;try{

    ByteArrayInputStream byteInputStream= newByteArrayInputStream(contents);

    bis= newBufferedInputStream(byteInputStream);

    File file= newFile(filePath);//获取文件的父路径字符串

    File path =file.getParentFile();if (!path.exists()) {

    logger.info("文件夹不存在,创建。path={}", path);boolean isCreated =path.mkdirs();if (!isCreated) {

    logger.error("创建文件夹失败,path={}", path);

    }

    }

    fos= newFileOutputStream(file);//实例化OutputString 对象

    output = newBufferedOutputStream(fos);byte[] buffer = new byte[1024];int length =bis.read(buffer);while (length != -1) {

    output.write(buffer,0, length);

    length=bis.read(buffer);

    }

    output.flush();

    }catch(Exception e) {

    logger.error("输出文件流时抛异常,filePath={}", filePath, e);

    }finally{try{

    bis.close();

    fos.close();

    output.close();

    }catch(IOException e0) {

    logger.error("文件处理失败,filePath={}", filePath, e0);

    }

    }

    }

    }

    展开全文
  • BinEd:以16进制格式查看class文件使用方法:右键class文件,点击Open as binaryJClassLib:以一种更为方便的方式查看字节码,相当于javap -v HelloWorld.class使用方法:光标锁定在java源文件-->选IDEA上方菜单--&...
  • java字节流(读写文件

    千次阅读 2021-02-12 14:12:01
    InputStream此抽象类是表示字节输入流的所有类的超类。需要定义 InputStream 的子类的应用程序必须始终提供返回下一个输入字节的方法。int available()返回此输入流方法的下一个调用方可以不受阻塞地从此输入流读取...
  • 将Jar包中的.class(字节码)文件转成.java源码文件       给大家安利一个隐藏形福利,通过一个工具快速的将jar包中的字节文件(.class)转换成java源文件(.java),说起来我要介绍的...
  • https://www.jianshu.com/p/4610944ee9be public static String readableFileSize(long size) { if (size &lt;= 0) return "0"; final String[] units = new String[]{"B", "... int d
  • Java把一个文件转化为byte字节数组

    万次阅读 2018-10-17 18:40:29
    Java把一个文件转化为byte字节数组 /** * 一个文件转化为byte字节数组。 * * @return */ private byte[] fileConvertToByteArray(File file) { byte[] data = null; try { File...
  • java的byte[]字节流转成文件

    万次阅读 2017-06-09 18:38:54
    * 将字节流转换成文件 * @param filename * @param data * @throws Exception */ public static void saveFile(String filename,byte [] data)throws Exception{ if(data != null){ String filepa
  • * byte(字节)根据长度转成kb(千字节)和mb(兆字节) * * @param bytes * @return */ public static int bytes2kb(int bytes) { BigDecimal filesize = new BigDecimal(bytes); BigDecimal megabyte = new ...
  • 如何将字节数组写入Java中的文件?

    千次阅读 2021-03-06 00:59:53
    下面是一个如何适当地执行从文件中读取字节数组的反向操作(抱歉,这只是我已经准备好的代码,我不希望asker实际粘贴并使用此代码):public static byte[] toByteArray(File file) throws IOException {...
  • 从一个class文件深入理解Java字节码结构

    万次阅读 多人点赞 2018-05-15 10:01:56
    我们都知道,Java程序最终是转换class文件执行在虚拟机上的,那么class文件是个怎样的结构,虚拟机又是如何处理去执行class文件里面的内容呢,这篇文章带你深入理解Java字节码中的结构。 1.Demo源码 首先,...
  • Java文件到二进制转换

    千次阅读 2021-03-06 06:40:25
    如果你指的是访问ACTUAL BINARY表格,那么读入文件并将每个字节转换为二进制表示…编辑:这里有一些代码将字节转换为带有位的字符串:String getBits(byte b){String result = "";for(int i = 0; i < 8; i++)...
  • Java基础-3】吃透Java IO:字节流、字符流、缓冲流

    万次阅读 多人点赞 2020-09-23 20:12:33
    什么是Java-IO?字符流和字节流的区别与适用场景是什么?缓冲流到底实现了什么?如何高效地读写文件? 本文用大量的示例图和实例,带你吃透Java IO。
  • java ->IO流_转换流

    千次阅读 2021-02-12 21:50:54
    转换流在学习字符流(FileReader、FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStreamWriter,这又是什么意思呢?OutputStreamWriter类...
  • Java 各种文件类型转换的方法

    千次阅读 多人点赞 2022-03-04 09:36:32
    Java 各种文件类型转换的方法
  • 字符集charset 也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、...gbk中文码表,使用两个字节存储一个中文,utf-8国际标准码表,使用三个字节存储一个中文 package file_main; import java.io.FileRead
  • Java 字节流读写文件

    万次阅读 2019-05-07 09:49:31
    Java字节流读写文件 针对文件的读写,JDK专门提供了两个类,分别是 FileInputStream 和 FileOutputStream ,它们都是InputStream 的子类。 FileInputStream 是操作文件字节输入流,专门用于读取文件中的数据。 ...
  • Java之.class文件字节文件

    千次阅读 2020-01-24 16:28:57
    .class: 是指文件扩展名称为.class的文件,表示由java源程序经过java编译器编译而且由JVM执行的二进制文件,因此可以通过拥有一份.class文件在不同的操作系统平台上的JVM执行,实现跨平台运行的特性 字节码bytecode: ...
  • 在实际开发中经常会碰到乱码问题:首先查看系统支持的编码方式,默认的编码方式//检查java支持的编码System.out.println(Charset.availableCharsets().toString());//检查系统默认的编码方式System.out.println...
  • Java字节文件的扩展名是( )。

    千次阅读 2021-03-22 10:47:12
    Java字节文件的扩展名是( )。答:.classThere has not been a great response to the slate, _________?: does there|has there|hasn't it|hasn't there答:has there资源性国有资产的特征包括:答:所有权的垄断...
  • java实现将字节数组写入到新建文件中 1.具体代码如下所示: public class FileUtil { /** * 方法功能:将字节数组写入到新建文件中。 * @param String fname * @param byte[] msg * @return boolean * */...
  • 运行java字节文件

    千次阅读 2019-12-25 11:41:26
    运行字节文件需要使用java.exe命令,它与javac.exe在同一目录下。与javac.exe相同,java.exe也不支持双击运行,所以也必须要使用DOS命令来运行。运行字节文件与编译有点区别: 首先切换到字节文件所在目录; ...
  • 因为业务,需要图片base64转成文件流,然后直接在浏览器访问就可以看见图片 /** * 回显图片 * @author liuhengliang * @return ModelAndView */ @RequestMapping(value = "/image") private void ...
  • 当我们开始运行的时候系统会执行javac命令先把java源文件编译成字节文件即: 这里科普一下java为什么会有字节文件字节码产生的背景: Java最初诞生的目的就是为了在不依赖于特定的物理硬件和操作系统环境下...
  • Java中的字节

    千次阅读 多人点赞 2022-01-08 22:31:46
    字节流2.1 IO流概述和分类...常见的应用:文件复制,文件上传,文件下载 按数据流向:输入流,输出流 输入流为读数据,输出流为写数据 按数据类型:字节输入流/输出流,字符输入流/输出流 一般来说是按数据类型来分的。
  • JAVA图片与字节流的相互转换

    万次阅读 2019-01-16 22:41:43
    我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。 而在网络上交换数据时,比如说从A...所以就先数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。
  • Java IO字节流读取文件总结

    万次阅读 2016-09-19 11:08:17
    本文对javaIO字节流的读取方式做总结,两种基本的读取方式。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 654,302
精华内容 261,720
关键字:

java怎么把字节转成文件

java 订阅