《Java就该这样学》读书笔记–之通俗易懂的IO流

觉得这一段讲得通俗易懂,就摘抄部分部分下来,作为理解IO。

来自:《Java就该这样学》的片段。

一、IO的名称

程序运行在内存和CPU构成的资源里,内存和CPU永远都是运行程序的加。语句就是对CPU的操作,而变量和new 是对内存的操作。

程序躲在内存里面,需要一种模式和内存外的东西打交道,我们管这样的操作叫做IO流,I是input输入,O是Output输出。

二、IO操作的步骤

要操作IO流,需要三步骤:

第一步:定位。我们需要知道操作的东西在什么地方,比如对硬盘,我们要知道在哪个盘上,哪个目录里的哪个文件;再比如对网络,我们要知道哪个网络地址的哪个端口。

第二步:建立管道。假设要操作的东西是一个水桶,或是管它叫做数据源,现在需要用一个水管连接水桶和内存,这个水管是有方向的,I就是向内存里流水的水管,O就是向内存外流水的水管。

第三步:操作管道。我们的程序还躲在程序里,去操作刚刚建立好的那个管道。

需要注意:所有离开内存的操作都是有危险的。在Java中,只要发现程序运行时可能存在问题,我们就会用try catch语句来保护风险代码,捕获异常,离开内存的操作一定是要捕获异常的,文件可能不在,硬盘可能坏了,网络可能不通了,甚至数据库服务器可能没启动。

既然第一,第二步我们准备好了,那么接下来就是第三步的操作管道。

三、操作管道示例

1. 读一个字符

在目录 c:/work/   新建一个文本文件:test.txt ,写入内容a

 

2.读取整个文件

将文本文件的内容修改成:abcdefghijklmn

我们将用到一个方法来读取文件内容的大小。

java.io.FileInputStream.available() 方法返回可以从此输入流中可阻断由下一个方法调用这个输入流中读取剩余的字节数。

方式一:

通过available()方法。

使用该方法需要注意,不能直接将fis.available当做i的长写到for循环上面。应为这个长度是时刻在变化的。我们只能取刚开始的长度值。

以下为错误示范:

 

方式二:

通过while((i=fis.read())!=-1){}

 

3. 复制文件

新建一个文本文件test1.txt,内容为空。

需要多加一个管道,用做输出。

查看文本文件,test.txt里面的数据复制到了test1.txt文件中了。

 

4.复制大文件

需求:把JDK目录下的src.zip文件复制到指定的目录下。

如果还是通过上面复制文件的方法,一个一个字节读取,那么效率太慢了,那么如果提高复制的效率呢?能不能一下子读取多点的字节或是更多?

解决方案:通过read数组的方法。一次性读多个字节。

那么可以得出以下的代码:

解释一下为什么要这么设计?

(1)byte数组的设计?

(2)为什么要加1?

 

注意:但是上面的方法还是存在一些缺陷的,每次复制都会多复制一些空字符进去。

解决方案:还是利用available的特性,for循环读取字节的时候,字节数变少,到最后的字节的时候,采取该方法读取。

得出以下方案:

 

5.文件加密和解密

文件加密的最基本的要求是能够将原本的内容隐蔽就行。

(1)写的时候多写一个常量。

这个加密方法比较简单,就是通过文件复制,复制的时候在每个字节复制的时候加上100,写入目标文件,这样再打开的时候,加密效果出来了。

解密方法

 

(2)利用变量加入动态变量

利用i%100加密

解密:

 

(3)上面一些规律性还是太强了,我们能不能设置一系列的动态变量,然后只有我们知道的。

第一步:我们生成密钥文件。

生成一组随机数放到密钥文件中。

 

第二步:加密

通过读取密钥文件里面的随机数,写到文件中。

 

第三步:解密

解密的时候,读取到的字节中减去添加的密钥部分。

 

最后加密成功!

 

6.字符流

字节流:能够读写计算机上的任何类型的文件,包括文本文件和非文本文件。

字符流:就是专门处理字符的流。什么是字符?狭义的讲,就是ASCII码,现在你完全可以理解成只要记事本能处理的文件,字符流就能够处理。

为什么字节流那么强大,我们还需要字符流?

字符流可以通过封装了字节流,让我们更好的操作字符。

为什么用的是PrintWriter?

 






如果您认为本教程质量不错,读后觉得收获很大,预期工资能蹭蹭蹭的往上涨,那么不妨小额赞助我一下,让我有动力继续写出高质量的教程。

发布者

souvc

souvc

搜你所想,投你所好。

《《Java就该这样学》读书笔记–之通俗易懂的IO流》有59个想法

  1. Pingback: Invitro Pharamacology
  2. Pingback: friv
  3. Pingback: jocuri friv
  4. Pingback: Bolide
  5. Pingback: colarts Diyala
  6. Pingback: Political Diyala
  7. Pingback: in vitro DMPK studies
  8. Pingback: Our site
  9. Pingback: Software klinik
  10. Pingback: empresa informática
  11. Pingback: iq human
  12. Pingback: pembukaan cpns 2018
  13. Pingback: https://goo.gl/RfxWPu
  14. Pingback: Yusuf kısa
  15. Pingback: womensuits
  16. Pingback: plus de détails
  17. Pingback: Snow algae
  18. Pingback: tutorialcup
  19. Pingback: DMPK Outsourcing
  20. Pingback: payday loans
  21. Pingback: site here
  22. Pingback: Online Casino Reviews
  23. Pingback: archiwnetrze.pl
  24. Pingback: microsoft office
  25. Pingback: UK Chat
  26. Pingback: reaches
  27. Pingback: horse riding
  28. Pingback: how safe is coinbase
  29. Pingback: ufa-help
  30. Pingback: shemale.uk
  31. Pingback: buy gym equipment
  32. Pingback: 2019
  33. Pingback: maglie calcio
  34. Pingback: website
  35. Pingback: andujar trøje
  36. Pingback: milan tröja
  37. Pingback: maglie calcio
  38. Pingback: fotballdrakter
  39. Pingback: Fodboldtrøjer

发表评论