JAVA 读文件一定得创建byte数组为什么

JAVA 读文件一定得创建byte数组为什么,第1张

看情况吧

当然你心情好了可以一个字节一个字节的读;

为什么要用byte,其实java读写文件调用的依然是底层 *** 作系统的接口

在 *** 作系统层面数据时按照块来读的

申请byte数组的目的是在jvm中开辟一块空间,然后调用jvm *** 作指令,jvm根据指令告诉 *** 作系统,把这块数据给我填满 *** 作系统填满之后,java就返回了

为什么要用byte因为byte是数据存储的最小单位了

所以byte[]数组就是一次性读取多少个最小单位,然后返回

这只是简单的描述,要更详细的了解,建议读java language specification (jls),jls3好像是15,16的jls7是jdk17的还有就是 *** 作系统原理相关的书

只能回答这么多了,再深的我也不懂~

不会,你可以设定一个指定大小的数组,然后重复读写。

import javaio;

public class FileStreamDemo2 {

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

//创建两个文件

File inFile = new File("tcty36rm");

File outFile = new File("newtcty36rm");

//最大的流为60Mb,当文件的容量大于60Mb的时候便分开流

final int MAX_BYTE = 60000000;

long streamTotal = 0; //接受流的容量

int streamNum = 0; //流需要分开的数量

int leave = 0; //文件剩下的字符数

byte[] inOutb; //byte数组接受文件的数据

//创建流文件读入与写出类

FileInputStream inStream = new FileInputStream(inFile);

FileOutputStream outStream = new FileOutputStream(outFile);

//通过available方法取得流的最大字符数

streamTotal = inStreamavailable();

//取得流文件需要分开的数量

streamNum = (int)Mathfloor(streamTotal/MAX_BYTE);

//分开文件之后,剩余的数量

leave = (int)streamTotal % MAX_BYTE;

//文件的容量大于60Mb时进入循环

if (streamNum > 0) {

for(int i = 0; i < streamNum; ++i){

inOutb = new byte[MAX_BYTE];

//读入流,保存在byte数组

inStreamread(inOutb, 0, MAX_BYTE);

outStreamwrite(inOutb); //写出流

outStreamflush(); //更新写出的结果

}

}

//写出剩下的流数据

inOutb = new byte[leave];

inStreamread(inOutb, 0, leave);

outStreamwrite(inOutb);

outStreamflush();

inStreamclose();

outStreamclose();

}

}

参数和返回值是两个概念。参数有两类,一类是仅仅作为读取的元素被引入,方法结束后不发生变化。一类则是参与到处理中,结束后发生变化。如果处理比较复杂,往往会使用第二类参数获取数据。

而返回值往往是处理的结果,最简单的往往是处理成功或失败。或者是没有结果就是成功,失败抛异常。

在inread中主要 *** 作是针对参数byt的,也就是把输入的数据存入到byt中。不过对于inread *** 作来说,用户输入了多少数据也是很重要的,所以返回值里就返回了输入的字节数。当然,也可以做个对象,同时返回byte数组和处理件数,或者返回一个新的byte数组,这取决于一开始对于inread的设计。java开发者选择了用户自申请缓冲区的做法,就是现在的作法了。

(顺便说一下, 让用户自己new一个byte数组当作缓冲区,然后传进来,可以比较好的适应低内存环境,例如早期电脑,例如嵌入式设备)

以上就是关于JAVA 读文件一定得创建byte数组为什么全部的内容,包括:JAVA 读文件一定得创建byte数组为什么、java的byte数组最多存储多少字节只用FileInputStream读取文件和只用FileOutputStream写入文件会出问题吗、byte[]数组的用法。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9528714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存