精华内容
下载资源
问答
  • 相对于文本文件,采用二进制格式的文件存储更省空间。InputStream用于按字节从输入流读取数据。其中的int read()方法读取一个字节,这个字节以整数形式返回0到255之间的一个值。为什么读一个字节,而不直接返回一个...

    db56b9f4055f7b363dbbf24c0afa346f.png

    FileWriter只能接受字符串形式的参数,也就是说只能把内容存到文本文件。相对于文本文件,采用二进制格式的文件存储更省空间。

    InputStream用于按字节从输入流读取数据。其中的int read()方法读取一个字节,这个字节以整数形式返回0到255之间的一个值。为什么读一个字节,而不直接返回一个byte类型的值?(推荐:java视频教程)

    因为byte类型最高位是符号位,它所能表示的最大的正整数是127。

    InputStream只是一个抽象类,不能实例化。FilelnputStream是InputStream的子类,用于从文件中按字节读取。

    FileInputStream流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等public static void main(String[] args) throws IOException {

    String filePath = "d:/test.txt";

    File file = new File (filePath); //根据文件路径创建一个文件对象

    //如果找不到文件,会抛出FileNotFoundException异常

    FilelnputStream filelnput = new FilelnputStream(file);

    }

    filelnput.close (); //关闭文件输入流,如果无法正常关闭,会抛出IOException异常

    OutputStream中的write(int b)方法用于按字节写出数据。FileOutputStream用于按字节把数据写到文件。例如,按字节把内容从一个文件读出来,并写入另外一个新文件,也就是文件复制功能。File fileln = new File ("source. txt"); //打开源文件

    File fileOut = new File ("target.txt”); //打开写入文件,也就是目标文件

    FilelnputStream streamln = new FilelnputStream (fileln); //根据源文件构建输入流

    FileOutputStream streamOut = new FileOutputStream (fileOut); //根据目标文件构建输出流

    int c;

    //从源文件中按字节读入数据,如果内容还没读完,则继续

    while ((c = streamln.read()) != -1) {

    streamOut .write (c); //写入目标文件

    }

    streamln.close。; //关闭输入流

    streamOut.close(); //关闭输出流

    判断文件是否已经存在,如果不存在则生成这个文件。File dataFile = new File(dicDir + dataDic);

    if (!dataFile.exists()) {

    //如果文件不存在则写入文件

    }

    用File.mkdirs()方法可以创建多级目录。例如,当一个目录不存在时,就创建它。File tempDir = new File(imgPath);

    if(!tempDir.exists()){

    tempDir.mkdirs();

    }

    更多java知识请关注java基础教程栏目。

    展开全文
  • Java读取二进制文件,以字节为单位进行读取,还可读取图片、音乐文件、视频文件等。在Java中,提供了四种类来对文件进行操作,分别InputStream、OutputStream、Reader、Writer,前两种对字节流的操作,后两种则...

    c13e0f24e2e1985c72c393b6a75713e2.png

    Java读取二进制文件,以字节为单位进行读取,还可读取图片、音乐文件、视频文件等。在Java中,提供了四种类来对文件进行操作,分别是InputStream、OutputStream、Reader、Writer,前两种是对字节流的操作,后两种则是对字符流的操作。

    FileWriter只能接受字符串形式的参数,也就是说只能把内容存到文本文件。相对于文本文件,采用二进制格式的文件存储更省空间。

    InputStream用于按字节从输入流读取数据。其中的int read()方法读取一个字节,这个字节以整数形式返回0到255之间的一个值。为什么读一个字节,而不直接返回一个byte类型的值?

    因为byte类型最高位是符号位,它所能表示的最大的正整数是127。

    InputStream只是一个抽象类,不能实例化。FilelnputStream是InputStream的子类,用于从文件中按字节读取。public static void main(String[] args) throws IOException {

    String filePath = "d:/test.txt";

    File file = new File (filePath); //根据文件路径创建一个文件对象

    //如果找不到文件,会抛出FileNotFoundException异常

    FilelnputStream filelnput = new FilelnputStream(file);

    }

    filelnput.close (); //关闭文件输入流,如果无法正常关闭,会抛出IOException异常

    OutputStream中的write(int b)方法用于按字节写出数据。FileOutputStream用于按字节把数据写到文件。例如,按字节把内容从一个文件读出来,并写入另外一个新文件,也就是文件复制功能。File fileln = new File ("source. txt"); //打开源文件

    File fileOut = new File ("target.txt”); //打开写入文件,也就是目标文件

    FilelnputStream streamln = new FilelnputStream (fileln); //根据源文件构建输入流

    FileOutputStream streamOut = new FileOutputStream (fileOut); //根据目标文件构建输出流

    int c;

    //从源文件中按字节读入数据,如果内容还没读完,则继续

    while ((c = streamln.read()) != -1) {

    streamOut .write (c); //写入目标文件

    }

    streamln.close。; //关闭输入流

    streamOut.close(); //关闭输出流

    判断文件是否已经存在,如果不存在则生成这个文件。File dataFile = new File(dicDir + dataDic);

    if (!dataFile.exists()) {

    //如果文件不存在则写入文件

    }

    用File.mkdirs()方法可以创建多级目录。例如,当一个目录不存在时,就创建它。File tempDir = new File(imgPath);

    if(!tempDir.exists()){

    tempDir.mkdirs();

    }

    众多java培训视频,尽在PHP中文网,欢迎在线学习!

    展开全文
  • 1、不管什么文件,物理存储二进制数据。...(每条数据都固定长度的)b、二进制文件可以存储char/int/short/long/float/……各种变量值。(进制文件每条数据不固定)怎么理解一条数据呢: char型字符,就是每一个字...

    1、不管什么文件,物理存储都是二进制数据。(计算机对他们读取方式是有区别的。要详细了解他们的区别,比较复杂,这里就不去考虑的这么具体)

    2、两者  能存储的数据类型不同:

    a、文本文件只能存储char型字符变量。(每条数据都是固定长度的)

    b、二进制文件可以存储char/int/short/long/float/……各种变量值。(进制文件每条数据不固定)

    怎么理解一条数据呢: char型字符,就是每一个字符就是一条数据。而int型字符,就是一个数字就是一条数据。比如:数字11,使用char型编码会把它 分成 两个字符1,分别编码。而int型就是把它当成一个数字编码。

    太底层的东西,先不用去管。知道 计算机 读写  文本文件 和  二进制文件 是不同的就可以了。

    1、位【bit】:最小的存储单位,存储 0 或 1

    2、字节【Byte】:计算机中数据的基本单位,每8位组成一个字节。(即,计算机中所有的字符,都是基于 字节 进行存储的)

    3、字【Word】:两个字节称为一个字。汉字的存储单位都是一个字。

    另:其它的存储单位都是基于字节进行扩展的,如:KB、MB、GB 等

    展开全文
  • 二进制文件

    2015-05-22 21:02:52
    二进制文件是直接把文件信息编码成二进制存储。因此在读取的时候要考虑内存中二进制代码应该怎么样解释。 二进制文件的读取是是要告诉元素的类型(编码方式),文本文件则默认为char类型。 文本文件是一种特殊的二...
    本质上是文本文件是把文件信息先转化成以字符编码的ascii码,再存储ascii的二进制代码。而二进制文件是直接把文件信息编码成二进制存储。因此在读取的时候要考虑内存中二进制代码应该怎么样解释。
    二进制文件的读取是是要告诉元素的类型(编码方式),文本文件则默认为char类型。
    文本文件是一种特殊的二进制文件

    稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾等。

    具体分析如下:

    一、以哪种方式打开一个文件

    ANSI C规定了标准输入输出函数库,用 fopen()函数打开文件。fopen()函数的调用方式一般为:
    FILE *fp;
    fp=fopen(文件名,使用文件方式);
    使用文件方式见下表:

    使用文件方式 含义
    "r"(只读) 为输入打开一个文本文件
    "w"(只写) 为输出打开一个文本文件
    "a"(追加) 为追加打开一个文本文件
    "rb"(只读) 为输入打开一个二进制文件
    "wb"(只写) 为输出打开一个二进制文件
    "ab"(追加) 为追加打开一个二进制文件
    "r+"(读写) 为读/写打开一个文本文件
    "w+"(读写) 为读/写创建一个文本文件
    "a+"(读写) 为读/写打开一个文本文件
    "rb+"(读写) 为读/写打开一个二进制文件
    "wb+"(读写) 为读/写创建一个二进制文件
    "ab+"(读写) 为读/写打开一个二进制文件


    同一个文件从磁盘读取文件到内存(程序数据区或者缓存区)时,两种方式下,内存中的内容一般不相同,这就是两种打开方式的实质性差别。

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

    2.在类Unix/Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。
    这里要说一个背景,那就是在windows下,它会做一个处理,就是写文件时,换行符会被转换成回车,换行符存在磁盘文件上,而读磁盘上的文件时,它又会进行逆处理,就是把文件中连续的回车,换行符转换成换行符。
    因此,在读取一个磁盘文件时,文本方式读取到文件内容很有可能会比二进制文件短,因为文本方式读取要把回车,换行两个字符变成一个字符,相当于截短了文件。但是为什么仅仅是可能呢?因为可能文本中不存在连着的45,42这两个字节(45是CR回车的ASCII码,42是换行符CL的ASCII码),也就不存在“截短”操作了,因此读到的内容是一样的。
    具体的来说,文件文件(以文本方式写的),最好以文本方式读。二进制文件(以二进制方式写的),最好以二进制方式读。不然可能会不正确。

    二、以什么函数读写文件

    数据怎么在磁盘上写不是由文件打开方式决定的,而是由写函数决定的。数据怎么从磁盘上读也不是由文件打开方式决定的,而是由读函数决定的。
    上面说的数据怎么写是指,一种类型的变量是怎么存的?比如int 12,可以直接存12的二进制码(4个字节),也可以存字符1,字符2.
    数据怎么读的是指,我要读一个int变量,是直接读sizeof(int)个字节,还是一个字符一个字符的读,直到读到的字符不是数字字符。

    C里面有两组文件读写函数恰好支持上面两种方式的读写:

    1.fread(buffer,size,count,fp),fwrite(buffer,size,count,fp)。用来读写一个数据块。它对应的是第一种存储方式。直接按类型的字节长度指定读写的字节数。

    2.fprintf函数和fscanf函数.它对应的是第二种读写方式。即以字符的方式读写。(fprintf函数、fscanf函数与printf函数、scanf函数的作用相仿,都是格式化读写函数。fprintf和fscanf函数的读写对象是磁盘文件,而printf和scanf函数的读写对象是终端。)
    它们的一般调用格式为:

    fprintf (文件指针,格式字符串,输出列表);               
    fscanf (文件指针,格式字符串,输入列表);

    三、怎么判断文件尾

    在C语言,或更精确地说成 C标准函式库中,有一个特别的字符EOF(stdio.h中这个定义 #define EOF (-1) ),它表示:文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。

    但是,C语言中,当把数据以二进制形式存放到文件中时,就会有-1值的出现,此时不能采用EOF作为二进制文件的结束标志。为解决这个问题,ANSI C提供一个feof函数,用来判断文件是否结束。如果遇到文件结束,函数feof(fp)的值为1,否则为0.
    feof函数既可用以判断二进制文件是否结束,也可以用以判断文本文件是否结束。但是要注意feof用以判断文本文件尾时,如果代码编写不当,可能会把文本文中中的文件结束符EOF也读取出来了;具体可以参考http://baike.baidu.com/view/656648.htm中feof函数的用法。

    四、知道一个文件是文本文件,还是二进制文件,更多的“提醒”我们,应该选择哪种读写函数。

    正如前文所说的,数据怎么存不是由文件打开方式决定的,而是由读写函数决定的。
    比如说,我们以二进制文件的方式打开一个文件(实际上只是指明了要进行换行符的转换),它更多的是代表一种理念(虚的):我“希望”这个文件里面的数据是这样的,int类型占4字节,char占1个字节。这种模式下,我用fread(buffer,size0f(int),1,fp)读取一个int到int变量中。

    这里需要记住:

    我们在对一个文件进行操作以前,首先,我们要清楚这个文件到底是文本文件还是二进制文件。文件文件用文本方式打开,二进制文件用二进制方式打开
    如果我们要操作一个二进制文件,那么我们就以二进制方式打开(理论上也可以以文件方式打开,但是如果写的二进制数据里面有45时,会转化成45,42存储,如前文所述。这是很有可能发生的)。同时读写的时候用fread,fwrite这两个函数。
    如果我要操作一个文本文件,那么我们就以文本的方式打开(理论上也可以以二进制方式打开,但是不保险)。同时读写的时候用读写字符的那些函数fprintf,fscanf ,fgetc,fputc,putw,getw,fgetc,fputs.

    展开全文
  • 查了下资料发现它们都可变长二进制数据,可变的意思是不是像VARBINARY类型一样用多少分配多少? 如果这样的话,是不是直接选longblob就好了呢qwq还是说无脑选longblob也会对数据库造成负担?
  • linux的文本文件与二进制文件的区分与windows的区分是相同的!说到底计算机存储的文件都是以二进制形式存储的,但是区别是,习惯上认为:(1)、文本文件文本文件是包含用户可读信息的文件。这些文件以ASCII码方式存储...
  • 二进制文件读写简介为什么二进制格式比文本格式更高效?译码空间什么时候用二进制格式去存储数据?数据持久化数值型资源数据使用二进制格式读写数据制定规则将数据写入根据规则进行读取字段类型关卡热重载案例步骤...
  • 那就是二进制文件和文本文件中的内容到底是怎么读写的?我们为什么打开二进制文件看到的是一些乱码? 由于今天的时间充足,编找了一点相关资料,并总结了一下。 文件分为两类:文本文件,二进制文件。 ...
  • Python——读取二进制文件

    千次阅读 2017-09-25 11:13:00
    读取二进制文件并转换成整数在处理MINIST数据集的时候,从网站上下载文件是二进制文件。我们以训练图像数据为例,前4个字节存储的是magic number (2051)。怎么根据这四个字节得到整数2051呢?在使用’rb’方式读取的...
  • 一个很小的框架,可以轻松操纵tty并创建伪造的二进制文件怎么运行的? 该框架具有三个主要功能,tas_execv,tas_forkpty和tas_tty_loop。 tas_execv:它与execv类似,但不会重新执行当前的二进制文件,这对于...
  • 旧的方法使用简单的键/值数据表,比如gdbm模块。Python提供了对它的支持,但是它没有...文件大小/记录大小给出文件中的记录数。对分搜索将在文件中执行O(log(n))查找,您需要编写一个适配器来测试是否相等。...
  • 稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机上面都以0,1存储的,那么两者怎么还存在差别呢?对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开...
  • 关于float和double在计算机中的存储结构这里就不赘述了,一般主要PC机法,用补码的方式存储, 不过这个跟我们用程序读取数据的关系不大,计算机自己知道怎么读。 我的计算机与数据文件的字节序相反的,所以需要...
  • 、回想一下,我们平时是怎么打开一个word文件的? 首先双击打开(open)---调用操作系统的打开功能将文件打开然后读取(read)---这里发生了把硬盘里的内容读入内存的操作最后看完了要关闭(clo...
  • 关于文件的文本读写和二进制读写

    千次阅读 2012-11-14 16:15:00
    我们都知道,文本文件和二进制文件在计算机上面都以0,1存储的,那么两者怎么还存在差别呢?我觉得,对于编程人员,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开这个文件,用...
  • 我们都知道,文本文件和二进制文件在计算机上面都以0,1存储的,那么两者怎么还存在差别呢?我觉得,对于编程人员,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开这个文件,用...
  • 我们都知道,文本文件和二进制文件在计算机上面都以0,1存储的,那么两者怎么还存在差别呢?我觉得,对于编程人员,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开这个文件,用...
  • 文件存储上,就是一些1011010010…的信息,怎么好说什么类型呢?比如,你把一个mp3文件删去一半,再后边粘上一首古诗上去,机器也不至于爆炸吧?这个文件又算哪种类型呢? 类型只是一种观点
  • 公司的这一次开发中遇到一个问题,就是服务器上不能存储文件或者图片,因为服务器的会清理掉和其他集群不同的地方,所以得到的文件流或图片流就没有了存放的地方,因此要展示的文件或图片该怎么展示呢?一开始蒙圈,...
  • 表单二进制 派发接口任务的过程中有的请求体不是json格式,有可能一个表单...百度上面可以百度到一款在线工具用于将本地存储的图片文件转换出其二进制格式的数据,http://tool.chinaz.com/tools/imgtobase/ 利用
  • 我们都知道,文本文件和二进制文件在计算机上面都以0,1存储的,那么两者怎么还存在差别呢?我觉得,对于编程人员,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开这个文件,用...
  • 可作为独立的二进制文件或在容器中运行。 这Jocko存储库的分支。 为什么? nolan旨在减少设置分布式提交日志或队列所带来的开销。 如果将其用于网站活动跟踪或应用程序日志聚合,则此工具应能够为许多用例提供...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 310
精华内容 124
关键字:

二进制文件是怎么存储的