为了账号安全,请及时绑定邮箱和手机立即绑定

文件传输基础——Java IO流

难度入门
时长 2小时 0分
学习人数
综合评分9.67
669人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰

已采纳回答 / 明天在那里
前面的0x表示是十六进制的,而ff是两个十六进制的数,每个f用二进制表示是1111,所以占四位,两个ff是一个字节.用二进制表示就是11111111

已采纳回答 / 我是菁粉
老师讲解时,都是实例化子类对象的,因为子类对象已经实例化过的,所以不会报错,如果此时直接对没有序列化的父类对象进行对象的文件存储与读取操作、网络传输时均会报错的。

已采纳回答 / 头发多
copyFileByBuffer这里是一个字节一个字节读的--->(c=bis.read())!=-1,并非批量,应将它与copyFileByByte的速度相比,是快的。如果copyFileByBuffer使用字节数组读取--->(b=in.read(buf, 0, buf.length))!=-1,那么会比同样使用字节数组批量读取的copyFile快。

已采纳回答 / 邓孤思
byte b = -13;System.out.println(Integer.toHexString(b));// fffffff3 System.out.println(Integer.toHexString(b & 0xff));// f3

已采纳回答 / Manny2011
如果文件很小,你申请的容量8*1024个byte的数组就已经可以完全装下,很显然那么第一次读就一下把文件读完了;如果文件很大,你申请的容量一次读取装不完时,那就会有下一次读取,直到读到文件的末尾,此时返回-1,就跳出循环了;read(buf,0,buf.length)意思是一次最多读取的字节数不超过8*1024,即<=8*1024.看一下这个方法的官方文档解释,你就会更加明白了.     *Reads up to <code>len</code> bytes of data ...

已采纳回答 / 翱睿
while是保证输出的字节数组个数,for是用来具体输出的

已采纳回答 / 翱睿
这个实体指的是操作流的类的实体

已采纳回答 / Manny2011
还是数据编码及存储的原理还没有搞清楚.^_^ 首先,我们用键盘写文件时,是以输入码进行输入的,比如拼音类的输入法,或者是五笔字形输入法,输入之后,它会把你要输入进去的字符保存成机内码,也就是0 1所组成的机内码,因为计算机只认识这种01 编码的二进制码. 当然对西方字符的话,相对字符少,最常用的ASCII编码规则(8*16的矩阵),已经可以涵盖所有的西文字符. 而对于中文字符,就复杂些,因为光汉字就有成千上万个,所以又需要另外一套编码规则,将所有这些中文字符涵盖进去,说白了,就是给每一个汉字附一个唯一的二...

已采纳回答 / Old_dai
直接子目录的抽象就是文件夹的路径,视频里说的子目录就是文件夹的意思。dir.list()返回的是文件和文件夹的名称,返回字符串数组;二dir.listFiles()返回的是文件和文件夹的路径,返回File对象

已采纳回答 / pergod
bytes是读取到字节的长度,如果因为流位于文件末尾而没有 可用 的字节,则返回值 -1。(bytes = in.read(buf, 0, buf.length))> 20*1024,如果这样设置的话,后面已经没有可用的字节还是会继续读入,这样会异常吧。

已采纳回答 / 春城乐
public static void main(String[] args) throws IOException { // TODO 自动生成的方法存根 String file="demo/dos.txt"; DataOutputStream dos=new DataOutputStream(new FileOutputStream(file)); dos.writeInt(10); dos.writeInt(-10); dos.writeLong(10L); dos.writeDoub...

已采纳回答 / 慕粉4406662
b是byte类型占8位,而我们需要的int类型是32位,所以会进行符号位扩展。如果原来的byte为11111111,扩展后就会变为11111111 11111111 11111111 11111111,所以需要把前三位变为0,0xff二进制就是1111 1111,前三位都是0,所以与0xff相与后就只剩下最低的一位为1。

已采纳回答 / 透过眼镜的脸
getBytes()方法是将一个字符串转化为一个字节数组byte[]的方法,使用的是默认的UTF-8编码表进行转换的。byte是数据类型,不是进制类型,没有说是二进制。java的byte是-128~127区间,所以说转换成十六进制没毛病。

已采纳回答 / chrealcool
是数据长度。是in.read读取文件存放在buf中的长度,你代码中输出bytes看下就知道了。估计你是把数据和长度搞混了把数据是存放在buf字节数组中,即老师代码中输出buf[i]

已采纳回答 / 绿色蝈蝈拜见
不好意思,是我没有解释清楚。这个问题提的好!首先我们贴出Java的源码:public synchronized int read() throws IOException {  if (pos >= count) {    fill();  if (pos >= count)    return -1;  }  return getBufIfOpen()[pos++] & 0xff;注意返回值,read的返回值虽然是int,但是他是读取的byte&0xff得到的,而例2中,因为...
课程须知
亲,为了更好的学习本门课程,需要您对二进制的知识有所了解,还要熟悉Java的基本语法和面向对象的知识。
老师告诉你能学到什么?
1、了解文件编码。 2、能够对文件和目录进行管理操作。 3、能够应用字节流和字符流对文件进行读写操作。 4、能够对对象进行序列化和反序列化。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消