精华内容
下载资源
问答
  • 文件流和二进制
    2021-08-31 14:47:39

    1.上传文件

    		String result="";
            PostMethod post = new PostMethod(url);
            Part[] parts = { new StringPart("token", "1F019648B56CF2C2A380248ED6F4A650"),  
            						new StringPart("key", "111111111111111"),
                       			    new FilePart("file",new file(filePath)};
            try {
                HttpClient httpclient = new HttpClient();
                MultipartRequestEntity entity = new MultipartRequestEntity( parts, post.getParams());
                post.setRequestEntity(entity);
                int code = httpclient.executeMethod(post);
                //拿到响应结果
                result = new String(post.getResponseBody(), "UTF-8");
            }catch (Exception e){
                logger.error("post请求出现异常:"+e);
            }finally {
                if (post!=null){
                    //可释放连接
                    post.releaseConnection();
                }
            }
            return result;
    

    2.上传文件二进制流

    Part[] parts = { new StringPart("token", "1F019648B56CF2C2A380248ED6F4A650"),  
            		 new StringPart("key", customerNo),
                     new FilePart("file",new ByteArrayPartSource("file",bytes))}
    
    更多相关内容
  • 文件流操作二进制文件的读写 写二进制文件 以文件流的方式操作文件一样可以支持二进制方式的块读写。 例如: ofstream cl(c.dat, ios::binary); int n = 10; cl.write((char*)&t,sizeof(t)); 第一行程序申明了 ...
  • 文件流和二进制

    千次阅读 2014-11-13 23:31:11
    C语言读写文件有两种方式ASCII 二进制。现在举例说明: 内存中的字符或字符串都是文本模式(unicode编码存储,统一长度,定长码,方便) 内存中的其他变量都是以二进制编码存储 程序的代码以文本模式ASCII码...

    C语言读写文件有两种方式ASCII 和 二进制。现在举例说明:

    内存中的字符或字符串都是文本模式(unicode编码存储,统一长度,定长码,方便)
    内存中的其他变量都是以二进制编码存储
    程序的代码以文本模式ASCII码方式存储

     

    fprintf写入非char型数据到文件,则文件为ascii类型(即文本文件);

    fwirte写入非char型数据到文件,则文件为二进制文件;

     

     

    1.windows系统中,文本模式下文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n"。读取的时候自动去掉\r,将\n写入内存。

    2.在类Unix/Linux系统中文本模式下,文件以"\n"代表换行所以Linux系统中在文本模式和二进制模式下并无区别

     

    fprintf则将二进制转换成ASCII输出到文件中,fscanf将读取的ascii码转换成二进制放到内存中

    ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:
    ASC码:00110101 00110110 00110111 00111000
          ↓        ↓       ↓         ↓
    十进制码:   5     6      7       8 共占用4个字节。ASCII码文件可在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。 由于是按字符显示,因此能读懂文件内容。 二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的存储形式为: 00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示, 但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。 输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作"流式文件

     

    在a.txt文件中输入:12 34 4 56 5,则打印出的也为12 34 4 56 5,因为使用fprintf将文件流中的数据按%d格式以字符流存入buf[i]中;

    1 #include <stdio.h>
      2 #include <stdlib.h>
      3 int main ()
      4 {
      5     FILE *fd = fopen("./a.txt","r");
      6     int buf[5] = {0};
      7     for(int i=0;i<5;i++) {
      8         fscanf(fd,"%d",&buf[i]);
      9         printf("%d ",buf[i]);
     10     }
     11     printf("\n");
     12     return 0;
     13 }
    ~                  

     

     

    打开b.txt可以正常显示1 2 3 4 5,因为将int型数据以%d的格式按字符流输入文件中;

    #include <stdio.h>
      5 int main() {
      6     int arr[] = {12, 23, 34, 45, 56}, size = 0;
      7     FILE *p_file = fopen("b.txt", "w");
      8     if (p_file) {
      9        // size = fwrite(arr, sizeof(int), 5, p_file);
     10         for(int i=0;i<5;i++) {
     11             fprintf(p_file,"%d ",arr[i]);
     12         }
     13         printf("实际写入了%d个整数类型存储区\n", size);
     14         fclose(p_file);
     15         p_file = NULL;
     16     }
     17     return 0;
     18 }
    



     

    展开全文
  • 我就废话不多说了,还是直接看代码吧 public static byte[] readStream(String imagepath) throws Exception { FileInputStream fs = new FileInputStream(imagepath); ByteArrayOutputStream outStream = new ...
  • 如果是文件流二进制)excel文件转化为blob,需要传 { responseType: “arraybuffer” } configApi.post(`/platform/push/exportCsv`, _params, { responseType: "arraybuffer" }).then(({ data, headers }) =>...

    如果是文件流(二进制)excel文件转化为blob,需要传 { responseType: “arraybuffer” }

      configApi.post(`/platform/push/exportCsv`, _params, { responseType: "arraybuffer" }).then(({ data, headers }) => {
            console.log(data, headers)
    
            let blob = new Blob([data], { type: 'text/csv;charset=utf-8' }) // 将服务端返回的文件流(二进制)excel文件转化为blob
            let fileName = window.decodeURI(headers['content-disposition'].split('=')[1], "UTF-8");
    
            console.log(blob, 'blob')
            if (window.navigator && window.navigator.msSaveOrOpenBlob) { // IE
              window.navigator.msSaveOrOpenBlob(blob, fileName)
            } else {
              let objectUrl = (window.URL || window.webkitURL).createObjectURL(blob)
              let downFile = document.createElement('a')
              downFile.style.display = 'none'
              downFile.href = objectUrl
              downFile.download = fileName // 下载后文件名
              document.body.appendChild(downFile)
              downFile.click()
              document.body.removeChild(downFile) // 下载完成移除元素
              // window.location.href = objectUrl
              window.URL.revokeObjectURL(objectUrl)   // 只要映射存在,Blob就不能进行垃圾回收,因此一旦不再需要引用,就必须小心撤销URL,释放掉blob对象。
            }
          })
    

    如果是csv,无需 { responseType: “arraybuffer” } ,并且在data 上加 “\ufeff” ,"\ufeff"是为了解决CSV中文乱码问题
    接口的返回结果是
    在这里插入图片描述
    处理代码

     configApi.post(`/platform/push/exportCsv`, _params).then(({ data, headers }) => {
            console.log(data, headers)
    
            let blob = new Blob(["\ufeff" + data], { type: 'application/vnd.ms-excel;charset=utf-8' }) // 将服务端返回的文件流(二进制)excel文件转化为blob
            let fileName = window.decodeURI(headers['content-disposition'].split('=')[1], "UTF-8");
    
            console.log(blob, 'blob')
            if (window.navigator && window.navigator.msSaveOrOpenBlob) { // IE
              window.navigator.msSaveOrOpenBlob(blob, fileName)
            } else {
              let objectUrl = (window.URL || window.webkitURL).createObjectURL(blob)
              let downFile = document.createElement('a')
              downFile.style.display = 'none'
              downFile.href = objectUrl
              downFile.download = fileName // 下载后文件名
              document.body.appendChild(downFile)
              downFile.click()
              document.body.removeChild(downFile) // 下载完成移除元素
              // window.location.href = objectUrl
              window.URL.revokeObjectURL(objectUrl)   // 只要映射存在,Blob就不能进行垃圾回收,因此一旦不再需要引用,就必须小心撤销URL,释放掉blob对象。
            }
          })
    
    展开全文
  • 最近做项目遇到这样的需求:管理后台需要随时下载数据报表,数据要实时生成后转换为excel下载。怎么解决这个问题呢?下面小编给大家分享Ajax请求二进制流进行处理(ajax异步下载文件)的简单方法,一起看看吧
  •  base64格式图片转换成二进制流并生成图片文件(阅读量1.2w) /** * 图片转换为base64格式 * * @param bitmap 位图 * @return */ @TargetApi(Build.VERSION_CODES.O) public static String bitmapToBase64...
  • 文件二进制流的格式写入数据库:首先获得文件路径,然后将文件二进制读出保存在一个二进制数组中具体请祥看本文,希望对你有所帮助
  • Java调用MATLAB,将文件转换为二进制流,http://blog.csdn.net/GSH_Hello_World/article/details/78524897
  • 二进制文件下载(spring+angularJs),正确完后曾业务需求,优化功能,实现前后端一致性,保证代码质量
  • 1、请求方式  axios({ url: ‘请求地址’, responseType: ‘arraybuffer’, method: ‘get/post’, params: { …data } }) 2、展示方式  两种展示方式任意选择 1、const url = URL.createObjectURL(new Blob([res]...
  • 第二步,需要打开按照行列读取文件,由于是纯二进制文件,内部不含邮任何的数据结构信息,因此我们需要给定二进制数据的行数列数(nxny)来确定图像的形状。这里我们的数据类型是float32型的,对应过来是4bytes,...
  • 采用springboot + vue的技术模式,实现了文件的上传下载,在页面上跟简洁直观的体现,在代码中也是少量代码实现复杂功能。
  • 开发过程,遇见将文件二进制的方式读取到缓存中的场景,于是在这里记录一下,方便以后复用。 读文件 void readFile(string& filePath, std::vector& data ) { ifstream file(filePath.c_str(), ...
  • 这里写目录标题13.2 二进制文件和字节13.2.1 InputStream/OutputStream1.InputStream2.OutputStream13.2.2 FileInputStream/FileOutputStream1.FileOutputStream2.FileInputStream13.2.3 ByteArrayInputStream/...

    13.2 二进制文件和字节流

            本节介绍在Java中如何以二进制字节的方式来处理文件,前面我们 提到Java中有流的概念,以二进制方式读写的主要流有:

            ·InputStream/OutputStream:这是基类,它们是抽象类

            ·FileInputStream/FileOutputStream:输入源和输出目标是文件的流。

            ·ByteArrayInputStream/ByteArrayOutputStream:输入源和输出目标 是字节数组的流。

            ·DataInputStream/DataOutputStream:装饰类,按基本类型和字符串 而非只是字节读写流。

            ·BufferedInputStream/BufferedOutputStream:装饰类,对输入输出流提供缓冲功能。

            下面,我们就来介绍这些类的功能、用法、原理和使用场景,最后 总结一些简单的实用方法。

    13.2.1 InputStream/OutputStream

            我们分别看下InputStream和OutputStream。

    1.InputStream

            (1)InputStream的基本方法

            InputStream是抽象类,主要方法是:

    在这里插入图片描述

            read方法从流中读取下一个字节,返回类型为int,但取值为0~255,当读到流结尾的时候,返回值为-1,如果流中没有数据,read方法 会阻塞直到数据到来、流关闭或异常出现。异常出现时,read方法抛出 异常,类型为IOException,这是一个受检异常,调用者必须进行处理。 read是一个抽象方法,具体子类必须实现,FileInputStream会调用本地 方法。所谓本地方法,一般不是用Java写的,大多使用C语言实现,具 体实现往往与虚拟机和操作系统有关

            InputStream还有如下方法,可以一次读取多个字节:
    在这里插入图片描述

            读入的字节放入参数数组b中,第一个字节存入b[0],第二个存入 b[1],以此类推,一次最多读入的字节个数为数组b的长度,但实际读入 的个数可能小于数组长度,返回值为实际读入的字节个数。如果刚开始 读取时已到流结尾,则返回-1;否则,只要数组长度大于0,该方法都 会尽力至少读取一个字节,如果流中一个字节都没有,它会阻塞,异常 出现时也是抛出IOException。该方法不是抽象方法,InputStream有一个 默认实现,主要就是循环调用读一个字节的read方法,但子类如 FileInputStream往往会提供更为高效的实现

            批量读取还有一个更为通用的重载方法:
    在这里插入图片描述
            读入的第一个字节放入b[off],最多读取len个字节,read(byte b[])就是调用了该方法

    在这里插入图片描述
            流读取结束后,应该关闭,以释放相关资源,关闭方法为:
    在这里插入图片描述
            不管read方法是否抛出了异常,都应该调用close方法,所以close方 法通常应该放在finally语句内。close方法自己可能也会抛出 IOException,但通常可以捕获并忽略。

            (2)InputStream的高级方法

            InputStream还定义了如下方法:

            skip跳过输入流中n个字节,因为输入流中剩余的字节个数可能不到 n,所以返回值为实际略过的字节个数。InputStream的默认实现就是尽 力读取n个字节并扔掉,子类往往会提供更为高效的实现, FileInputStream会调用本地方法。在处理数据时,对于不感兴趣的部 分,skip往往比读取然后扔掉的效率要高

            available返回下一次不需要阻塞就能读取到的大概字节个数。 InputStream的默认实现是返回0,子类会根据具体情况返回适当的值, FileInputStream会调用本地方法。在文件读写中,这个方法一般没什么 用,但在从网络读取数据时,可以根据该方法的返回值在网络有足够数 据时才读,以避免阻塞

            一般的流读取都是一次性的,且只能往前读,不能往后读,但有时 可能希望能够先看一下后面的内容,根据情况再重新读取。比如,处理 一个未知的二进制文件,我们不确定它的类型,但可能可以通过流的前 几十个字节判断出来,判读出来后,再重置到流开头,交给相应类型的 代码进行处理

            InputStream定义了三个方法:mark、reset、markSupported,用于支 持从读过的流中重复读取。怎么重复读取呢?先使用mark()方法将当 前位置标记下来,在读取了一些字节,希望重新从标记位置读时,调用 reset方法。能够重复读取不代表能够回到任意的标记位置,mark方法有 一个参数readLimit,表示在设置了标记后,能够继续往后读的最多字节 数,如果超过了,标记会无效。为什么会这样呢?因为之所以能够重读,是因为流能够将从标记位置开始的字节保存起来,而保存消耗的内 存不能无限大,流只保证不会小于readLimit

            不是所有流都支持mark、reset方法,是否支持可以通过markSupported的返回值进行判断。InpuStream的默认实现是不支持, FileInputStream也不直接支持,但BufferedInput-Stream和 ByteArrayInputStream可以支持

    2.OutputStream

            OutputStream的基本方法是:
    在这里插入图片描述
            向流中写入一个字节,参数类型虽然是int,但其实只会用到最低的 8位这个方法是抽象方法,具体子类必须实现,FileInputStream会调用 本地方法

            OutputStream还有两个批量写入的方法:
    在这里插入图片描述

            在第二个方法中,第一个写入的字节是b[off],写入个数为len,最 后一个是b[off+len-1],第一个方法等同于调用write(b,0, b.length);。OutputStream的默认实现是循环调用单字节的write()方 法,子类往往有更为高效的实现,FileOutpuStream会调用对应的批量写 本地方法

            OutputStream还有两个方法:

    在这里插入图片描述
            flush方法将缓冲而未实际写的数据进行实际写入,比如,在 BufferedOutputStream中,调用flush方法会将其缓冲区的内容写到其装饰 的流中,并调用该流的flush方法。基类OutputStream没有缓冲,flush方 法代码为空

            需要说明的是文件输出流FileOutputStream,你可能会认为,调用flush方法会强制确保数据保存到硬盘上,但实际上不是这样, FileOutputStream没有缓冲,没有重写flush方法,调用flush方法没有任何效果,数据只是传递给了操作系统,但操作系统什么时候保存到硬盘上,这是不一定的。要确保数据保存到了硬盘上,可以调用 FileOutputStream中的特有方法,具体待会介绍。

            close方法一般会首先调用flush方法,然后再释放流占用的系统资 源。同InputStream一样,close方法一般应该放在finally语句内

    13.2.2 FileInputStream/FileOutputStream

            FileInputStream和FileOutputStream的输入源和输出目标是文件,我们分别介绍。

    1.FileOutputStream

            FileOutputStream有多个构造方法,其中两个如下所示:

    在这里插入图片描述
            File类型的参数file和字符串的类型的参数name都表示文件路径,路 径可以是绝对路径,也可以是相对路径,如果文件已存在,append参数 指定是追加还是覆盖,true表示追加,false表示覆盖,第二个构造方法 没有append参数,表示覆盖。new一个FileOutputStream对象会实际打开 文件,操作系统会分配相关资源。如果当前用户没有写权限,会抛出异 常SecurityException,它是一种RuntimeException。如果指定的文件是一 个已存在的目录,或者由于其他原因不能打开文件,会抛出异常 FileNotFoundException,它是IOException的一个子类

            我们看一段简单的代码,将字符串"hello,123,老马"写到文件 hello.txt中:

    在这里插入图片描述
            OutputStream只能以byte或byte数组写文件,为了写字符串,我们调 用String的get-Bytes方法得到它的UTF-8编码的字节数组,再调用 write()方法,写的过程放在try语句内,在finally语句中调用close方法

            FileOutputStream还有两个额外的方法:

    在这里插入图片描述

            FileChannel定义在java.nio中,表示文件通道概念。我们不会深入介绍通道,但内存映射文件方法定义在FileChannel中,我们会在下章介 绍。FileDescriptor表示文件描述符,它与操作系统的一些文件内存结构相连,在大部分情况下,我们不会用到它,不过它有一个方法sync:

    在这里插入图片描述

            这是一个本地方法,它会确保将操作系统缓冲的数据写到硬盘上。 注意与Output-Stream的flush方法相区别,flush方法只能将应用程序缓冲 的数据写到操作系统,sync方法则确保数据写到硬盘,不过一般情况 下,我们并不需要手工调用它,只要操作系统和硬件设备没问题,数据迟早会写入。在一定特定情况下,一定需要确保数据写入硬盘,则可以调用该方法

    2.FileInputStream

            FileInputStream的主要构造方法有:
    在这里插入图片描述

            参数与FileOutputStream类似,可以是文件路径File对象但必须是一个已存在的文件,不能是目录。new一个FileInputStream对象也会实 际打开文件,操作系统会分配相关资源,如果文件不存在,会抛出异常 FileNotFoundException,如果当前用户没有读的权限,会抛出异常 SecurityException。我们看一段简单的代码,将上面写入的文 件"hello.txt"读到内存并输出:

    在这里插入图片描述
            读入到的是byte数组,我们使用String的带编码参数的构造方法将其 转换为了String。这段代码假定一次read调用就读到了所有内容,且假定 字节长度不超过1024。为了确保读到所有内容,可以逐个字节读取直到文件结束

    在这里插入图片描述
            在没有缓冲的情况下逐个字节读取性能很低,可以使用批量读入且 确保读到结尾,如下所示:
    在这里插入图片描述

            不过,这还是假定文件内容长度不超过一个固定的大小1024。如果 不确定文件内容的长度,但不希望一次性分配过大的byte数组,又希望 将文件内容全部读入,怎么做呢?可以借助ByteArrayOutputStream,我 们下面进行介绍。

    13.2.3 ByteArrayInputStream/ByteArrayOutputStream

            它们的输入源和输出目标是字节数组,我们分别介绍。

    1.ByteArrayOutputStream

            ByteArrayOutputStream的输出目标是一个byte数组,这个数组的长度是根据数据内容动态扩展的,它有两个构造方法:

    在这里插入图片描述
            第二个构造方法中的size指定的就是初始的数组大小,如果没有指 定,则长度为32。在调用write方法的过程中,如果数组大小不够,会进 行扩展,扩展策略同样是指数扩展,每次至少增加一倍

            ByteArrayOutputStream有如下方法,可以方便地将数据转换为字节数组或字符串:

    在这里插入图片描述
            toString()方法使用系统默认编码

            ByteArrayOutputStream中的数据也可以方便地写到另一个 OutputStream

    在这里插入图片描述

            ByteArrayOutputStream还有如下额外方法:
    在这里插入图片描述
            size方法返回当前写入的字节个数。reset方法重置字节个数为0,reset后,可以重用已分配的数组

            使用ByteArrayOutputStream,我们可以改进前面的读文件代码,确保将所有文件内容读入:

    在这里插入图片描述

            读入的数据先写入ByteArrayOutputStream中,读完后,再调用其 toString方法获取完整数据

    2.ByteArrayInputStream

            ByteArrayInputStream将byte数组包装为一个输入流,是一种适配器模式,它的构造方法有:
    在这里插入图片描述
            第二个构造方法以buf中offset开始的length个字节为背后的数据。 ByteArrayInput-Stream的所有数据都在内存,支持mark/reset重复读取

            为什么要将byte数组转换为InputStream呢?这与容器类中要将数 组、单个元素转换为容器接口的原因是类似的,有很多代码是以 InputStream/OutputSteam为参数构建的,它们构成了一个协作体系,将 byte数组转换为InputStream可以方便地参与这种体系,复用代码

    13.2.4 DataInputStream/DataOutputStream

            上面介绍的类都只能以字节为单位读写,如何以其他类型读写呢? 比如int、double。可以使用DataInputStream/DataOutputStream,它们都是装饰类

    1.DataOutputStream

            DataOutputStream是装饰类基类FilterOutputStream的子类, FilterOutputStream是Output-Stream的子类,它的构造方法是:

            它接受一个已有的OutputStream,基本上将所有操作都代理给了 它。DataOutputStream实现了DataOutput接口,可以以各种基本类型和字 符串写入数据,部分方法如下:
    在这里插入图片描述
            在写入时,DataOutputStream会将这些类型的数据转换为其对应的二进制字节,比如:

            1)writeBoolean:写入一个字节,如果值为true,则写入1,否则 0。

            2)writeInt:写入4个字节,最高位字节先写入,最低位最后写入。

            3)writeUTF:将字符串的UTF-8编码字节写入,这个编码格式与标准的UTF-8编码略有不同,不过,我们不用关心这个细节

            与FilterOutputStream一样,DataOutputStream的构造方法也是接受一个已有的Output-Stream:

    在这里插入图片描述

            我们来看一个例子,保存一个学生列表到文件中,学生类的定义 为:

    在这里插入图片描述

            学生列表内容为:
    在这里插入图片描述

            将该列表内容写到文件students.dat中的代码可以为:

    在这里插入图片描述
            我们先写了列表的长度,然后针对每个学生、每个字段,根据其类 型调用了相应的write方法

    2.DataInputStream

            DataInputStream是装饰类基类FilterInputStream的子类, FilterInputStream是Input-Stream的子类。DataInputStream实现了 DataInput接口,可以以各种基本类型和字符串读取数据,部分方法有:

    在这里插入图片描述

            在读取时,DataInputStream会先按字节读进来,然后转换为对应的类型

            DataInputStream的构造方法接受一个InputStream:
    在这里插入图片描述

            还是以上面的学生列表为例,我们来看怎么从文件中读进来:

    在这里插入图片描述
            读基本是写的逆过程,代码比较简单,就不赘述了。使用 DataInputStream/DataOutput-Stream读写对象,非常灵活,但比较麻烦, 所以Java提供了序列化机制,我们在下章介绍。

    13.2.5 BufferedInputStream/BufferedOutputStream

            FileInputStream/FileOutputStream是没有缓冲的,按单个字节读写时 性能比较低,虽然可以按字节数组读取以提高性能,但有时必须要按字节读写,怎么解决这个问题呢?方法是将文件流包装到缓冲流中。 BufferedInputStream内部有个字节数组作为缓冲区,读取时,先从这个 缓冲区读,缓冲区读完了再调用包装的流读,它的构造方法有两个:

    在这里插入图片描述
            size表示缓冲区大小,如果没有,默认值为8192。除了提高性能,BufferedInputStream也支持mark/reset,可以重复读取。与 BufferedInputStream类似,BufferedOutputStream的构造方法也有两个, 默认的缓冲区大小也是8192,它的flush方法会将缓冲区的内容写到包装的流中

            在使用FileInputStream/FileOutputStream时,应该几乎总是在它的外面包上对应的缓冲类,如下所示:

    在这里插入图片描述

            再比如:

    在这里插入图片描述

    13.2.6 实用方法

            可以看出,即使只是按二进制字节读写流,Java也包括了很多的 类,虽然很灵活,但对于一些简单的需求,却需要写很多代码。实际开 发中,经常需要将一些常用功能进行封装,提供更为简单的接口。下面 我们提供一些实用方法,以供参考,这些代码都比较简单易懂,我们就 不解释了。

            复制输入流的内容到输出流,代码为:
    在这里插入图片描述
            实际上,在Java 9中,InputStream类增加了一个方法transferTo,可 以实现相同功能,实现是类似的,具体代码为:

    在这里插入图片描述
            将文件读入字节数组,这个方法调用了上面的复制方法,具体代码为:
    在这里插入图片描述

            将字节数组写到文件,代码为:
    在这里插入图片描述
            Apache有一个类库Commons IO,里面提供了很多简单易用的方 法,实际开发中,可以考虑使用

    13.2.7 小结

            本节介绍了如何在Java中以二进制字节的方式读写文件,介绍了主要的流。

            1)InputStream/OutputStream:是抽象基类,有很多面向流的代 码,以它们为参数,比如本节介绍的copy方法。

            2)FileInputStream/FileOutputStream:流的源和目的地是文件。

            3)ByteArrayInputStream/ByteArrayOutputStream:源和目的地是字 节数组,作为输入相当于适配器,作为输出封装了动态数组,便于使用。

            4)DataInputStream/DataOutputStream:装饰类,按基本类型和字符 串读写流。

            5)BufferedInputStream/BufferedOutputStream:装饰类,提供缓 冲,FileInputStream/FileOutputStream一般总是应该用该类装饰。

            最后,我们提供了一些实用方法,以方便常见的操作,在实际开发 中,可以考虑使用专门的类库,如Apache Commons IO(http://commons.apache.org/proper/commons-io/ )。本节完整的代码 在github上,地址为https://github.com/swiftma/program-logic ,位于包 shuo.laoma.file.c57下。

    参考目录

    绝大多数内容来自于:Java编程的逻辑 作者: 马俊昌(13.2 二进制文件和字节流)

    Java官方文档
    https://docs.oracle.com/javase/specs/index.html

    展开全文
  • 在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有作用,后来查阅了相关资料大概了解了,这篇文章就主要介绍了Python中struct模块对字节/二进制流的操作,需要的朋友可以参考借鉴。
  • 用于读取二进制文件,可进行二进制数据检索等。
  • 您可以读取任何文件并将其存储在字节数组中,如下所示:byte [] bytes = File.ReadAllBytes(“ filename.ext”);
  • 文件转换为二进制流

    热门讨论 2013-02-19 16:06:26
    文本字符串与byte[], 整个物理文件与byte[], 物理文件内容与byte[], stream与byty[] 之间的相互转换。 从磁盘读取文件,将文件写入磁盘。
  • 图片上传后自动转化为二进制流,最精简演示图片转化过程。
  • 将文件转为二进制,可将二进制转为文件。二进制文件流相互转换
  • 第一步,在 axios 请求中加入参数,表示接收的数据为二进制文件流 responseType: 'blob' 第二步,在拿到数据流之后,把流转为指定文件格式并创建a标签,模拟点击下载,实现文件下载功能 let blob = res.data let reader =...
  • web前端js显示后台接口pdf二进制流文件,可以直接在idea运行。包含PDFJS 等相关js。详细参考readme
  • 本篇文章主要介绍了JAVA中读取文件二进制,字符)内容的方法总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 下面小编就为大家带来一篇老生常谈文本文件和二进制文件的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 将图片以二进制形式存储:为图片设立设立一个阈值大于的像素点为1,小于的像素点为0,使用OPenCV来进行图像处理,同时使用.xml文件来定位眼睛坐标
  • 但实际上,Ajax可以字节发送二进制数据。 发送二进制数据 var oReq = new XMLHttpRequest(); oReq.open(POST, url, true); oReq.onload = function (oEvent) { // Uploaded. }; var blob = new Blob(['abc123'], {...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 360,454
精华内容 144,181
关键字:

文件流和二进制