总结
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
大厂面试场景
知识点总结
========================================================================
压缩的时候如果没有指定文件的修改时间,则会以系统当前的时间做为修改时间,我们希望和原文件的修改时间保持一致。
ZipEntry就代表了压缩文件里面的文件,所以要修改压缩文件里面的文件的信息时就可以找ZipEntry就行了。如下:
zipEntry.time = rawfile.lastModified()
当然,文件还有创建时间和访问时间,在文件上右击并选择属性即可查看,如下:
百度了一下,这些属性是可以获取到的,JDK本身有提供这样的方法,如下:
BasicFileAttributes att = Files.readAttributes(p, BasicFileAttributes.class);
att.creationTime();
att.lastAccessTime();
att.lastModifiedTime();
但是这些方法在Android中被阉割掉了,也无所谓了,而且在Windows电脑上显示的时间也是修改时间,如下:
就算不阉割这些方法也没有用,据说在lunix系统下创建的文件只有最后修改时间,是没有创建时间这个属性的(不知道是不是真的)。如果说有公司有要求一定要知道文件的创建时间,解决方案也很简单,在创建文件的时候,把当前时间加到文件名上即可。
=====================================================================
如上图,压缩配置有速度最快、体积最小,如果选择自定义还会看到有存储、最快、较快、标准、较好、最好等级别,最好的意思是压缩的最厉害,压缩的文件最小,但是需要的压缩时间也是最长的,在代码中,写入压缩的数据是通过ZipOutputStream流来写的,所以这个类要知道压缩级别,找这个类上的方法即可,如下:
zipOutputStream.setLevel(Deflater.NO_COMPRESSION) // 无压缩
zipOutputStream.setLevel(Deflater.BEST_SPEED) // 最快的压缩
zipOutputStream.setLevel(Deflater.BEST_COMPRESSION) // 最好的压缩
setLevel接收的参数是int类型,取值范围是0 ~ 9,0是无压缩,就是可以把1个或几个文件打包到一个zip文件中,但是文件数据没有进行压缩,1 ~ 9就是压缩等级,9代表最好的压缩等级,需要的压缩时间也就最长。这个一般不用设置,用默认的就挺好了。我项目中使用了最好的压缩,因为我压缩的是一些日记文件,内容都不算大,虽然选了最了最好的压缩,但是时间也很快,压缩的小一些,时间是长了一点,但是上传的时间也快了一点。
========================================================================
zipOutputStream.setComment(String comment)
效果如下:
为什么不写中文?因为会有中文乱码,怎么解决中文乱码呢,这个我懒得管了,公司也没要求要加这个,所以真实开发就是这样的,用到什么学什么,用不到的,不学也罢!
============================================================================
zipOutputStream.putNextEntry(zipEntry)
zipOutputStream.write(bytes)
zipOutputStream.closeEntry()
关键就是putNextEntry就代表往压缩文件里放一个文件,然后write开始写入这个文件的内容,写完之后调用closeEntry,再来第二个文件时就重复一样的流程即可,完整示例如下:
fun main() {
val rawfile_1 = File("C:\\Users\\even\\Desktop\\logs\\压缩示例.txt")
val rawfile_2 = File("C:\\Users\\even\\Desktop\\logs\\Hello.txt")
val zipfile = File("C:\\Users\\even\\Desktop\\logs\\压缩示例.zip")
val rawFileList = listOf(rawfile_1, rawfile_2)
ZipOutputStream(zipfile.outputStream()).use { zos ->
rawFileList.forEach { rawFile ->
zos.putNextEntry(ZipEntry(rawFile.name))
rawFile.inputStream().use { ins ->
val array = ByteArray(8192)
var len: Int
while (ins.read(array).also { len = it } != -1) {
zos.write(array, 0, len)
}
}
zos.closeEntry()
}
}
}
效果如下:
=============================================================================
相信有了上面的基础知识,你要完成递归压缩一个目录下的所有内容,应该也是简简单单了,公司里没这需求,我也懒得写代码去实现了。
OK,就讲到这了,虽然类上面还有很多其他方法,但是对于我目前项目的需求来说已经够用了,我也懒得去研究那些方法干嘛用的,人生苦短,该懒的时候就要懒!
[
创作打卡挑战赛
赢取流量/现金/CSDN周边激励大奖
最后
这份清华大牛整理的进大厂必备的redis视频、面试题和技术文档
祝大家早日进入大厂,拿到满意的薪资和职级~~~加油!!
感谢大家的支持!!
早日进入大厂,拿到满意的薪资和职级~~~加油!!
感谢大家的支持!!
[外链图片转存中…(img-NyzsasCt-1714898127387)]