最新回答 / 幕布斯7473508
他这个只是打印文件,而不是目录。
if(file.isDirectory())//这个判断的是是不是目录,如果是就递归。把它下面的文件路径打印出来。 你如果要打印目录其实可以在递归前加上这段代码:System.out.print( file ); 他就会把目录也打印下来。?
2019-11-04
最新回答 / jia_蛙
你不是已经得到了结果吗? 使用Integer.toHexString就已经把字节转换成了以16进制显示的方式 这里又使用 &0xff把前面24个没用的0去掉,这就变成你控制台输出的那些了
2019-10-31
最赞回答 / iodysseus
你的补0判断没有问题,只不过是因为你的读取文件中,包含了中文,而中文在字节数组中保存的数值是负值, if(buf[i]<=0xf){ System.out.print("0"); }所以但凡是中文 都会经由此补上0,而且看你输出的全是3位补0,应该是全文字内容,你再加入一点字母数字,就会发现有3位和两位并存的现象
2019-10-30
最新回答 / SloMo8
00 06 ---> 这两字节表示的是字符串s占6个字节e4 b8 ad e5 9b bd --->"中国"的utf-8编码4e 2d 56 fd --->"中国"的utf-16be编码
2019-10-21
我感觉java面向对象遵循的是宏观因果律
序列化的时候调用所有父类的构造方法其实是因为Bar2 bar = new Bar2()这个实例化对象的操作造成的,可以在后面System.out.println("构造方法之后");可以看出来,因为要构造子类都得先构造父类
反序列化如果父亲实现了序列化接口,对儿子进行序列化时其序列化代码中就蕴含了父亲的信息,也就知道了其父亲的存在,但不知道他爷爷以及一直到老祖宗Object是否存在,因为他们没有实现序列化接口,所以得依次创建这些祖先类的实例,也就是调用构造方法。但由于他父亲已经存在于序列化信息中。所以就不用再构造一遍了。
为了保证反序列不是无中生有的
序列化的时候调用所有父类的构造方法其实是因为Bar2 bar = new Bar2()这个实例化对象的操作造成的,可以在后面System.out.println("构造方法之后");可以看出来,因为要构造子类都得先构造父类
反序列化如果父亲实现了序列化接口,对儿子进行序列化时其序列化代码中就蕴含了父亲的信息,也就知道了其父亲的存在,但不知道他爷爷以及一直到老祖宗Object是否存在,因为他们没有实现序列化接口,所以得依次创建这些祖先类的实例,也就是调用构造方法。但由于他父亲已经存在于序列化信息中。所以就不用再构造一遍了。
为了保证反序列不是无中生有的
2019-10-15
读文件是硬盘往内存里不断input,CPU在内存里不断read
写文件是CPU不断往内存里write,内存不断往硬盘里存储output
所以把内存看成主体,输入流是本来就存在于硬盘的数据不断输入到内存,我们read内存就能看到数据了,是一种输入过程
输出流得先write进内存,内存再输出到硬盘进行存储,是一种输出过程也就是output
close()应该就是关闭内存
写文件是CPU不断往内存里write,内存不断往硬盘里存储output
所以把内存看成主体,输入流是本来就存在于硬盘的数据不断输入到内存,我们read内存就能看到数据了,是一种输入过程
输出流得先write进内存,内存再输出到硬盘进行存储,是一种输出过程也就是output
close()应该就是关闭内存
2019-10-13
字符流的底层也是字节流
所以在创建字符流对象时,也需要把字节流对象传入
如:InputStreamReader in=new InputSteamReader(new FileInputStream());
所以在创建字符流对象时,也需要把字节流对象传入
如:InputStreamReader in=new InputSteamReader(new FileInputStream());
2019-09-24
for循环适合已知次数的情况,即for只会读到字节数组满了就会停止。
while是一直读到文件结尾才会停止,如果字节数组满了,它会从头覆盖此数组进行读取。
while是一直读到文件结尾才会停止,如果字节数组满了,它会从头覆盖此数组进行读取。
2019-09-24