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

文件传输基础——Java IO流

难度入门
时长 2小时 0分
学习人数
综合评分9.67
669人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
老师这个比喻非常到位

最赞回答 / 壮丹田
忽然搞懂了。listFile()返回的是一个对象,能接着做递归。list()返回的是String数组,不能接着做递归,查子目录的子目录。

已采纳回答 / Old_dai
直接子目录的抽象就是文件夹的路径,视频里说的子目录就是文件夹的意思。dir.list()返回的是文件和文件夹的名称,返回字符串数组;二dir.listFiles()返回的是文件和文件夹的路径,返回File对象
最近变得很慢。看十分钟要等一小时
原来是这样的,开篇的那个抛砖引玉的编码问题实在是绝了,效果很棒,厉害了word老师!!
都是一样的东西,字符流是对文件的操作,字节流可以是任意类型的。其实不管是InputStreamReader还是BufferedReader都是对字节流FileinputStream的封装 让我们使用起来更加方便
也可以自己使用byte与编码集来自己转换,将字节流转换成字符串
咋测试用字节流数组拷贝的方式比buff还快呢,快得多
byte[] bt = new byte[1024 * 1024 * 10];
while (inputStream.read(bt) != -1) {
outputStream.write(bt);

}
就是这种方式 ,比buffer还快
public int read(byte[] b)
throws IOException
The number of bytes actually read is returned as an integer.
read()返回的是steam流的下一个byte,将下一个byte转成int返回,read(byte[])返回的是steam流中读取到的字节的个数.
所以int b = read() 和 int b = read(byte[])返回值完全是两回事。
我使用一个140M左右的文件试了woider所说的,适用缓冲写入的方法没有直接适用FileOutputStream的方法来的快。使用buffer写入的时候时间为350多毫秒,而适用File方法写入的时间为200零几毫秒。更大的文件没有测试,也不知道这种测试是不是存在局限性。有测试不同结果的小伙伴,欢迎一起讨论,一起进步。
cwt正解,循环写入的时候不使用flush的速度远高于适用其的速度。
dos.writeInt(10);
dos.writeUTF("中国");
dos.writeInt(10);
dos.writeChars("中国");
dos.flush();
dos.close();
IOUtil.printHexString(fileName);
===============
00 00 00 0a 00 06 e4 b8 ad e5
9b bd 00 00 00 0a 4e 2d 56 fd
===============

00 06 这两个字节表示的是该字符串所占用的字节数,与字符串无关。
dos.writeUTF("中国");
dos.writeChars("中国");
4e 2d 56 fd 00 06 e4 b8 ad e5 9b bd
老师讲得似乎有问题?有大神可以解释下吗

最赞回答 / 头发多
00  06 --->  这两字节表示的是字符串s占6个字节   (  String s = dis.readUTF();  )e4  b8  ad  e5  9b  bd  --->"中国"的utf-8编码4e  2d  56  fd  --->"中国"的utf-16be编码
课程须知
亲,为了更好的学习本门课程,需要您对二进制的知识有所了解,还要熟悉Java的基本语法和面向对象的知识。
老师告诉你能学到什么?
1、了解文件编码。 2、能够对文件和目录进行管理操作。 3、能够应用字节流和字符流对文件进行读写操作。 4、能够对对象进行序列化和反序列化。

微信扫码,参与3人拼团

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

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

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消