大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。
当前系列: J&C 修改讲义

复习:操作系统:文件

Java和C#都提供了文件操作相关的类库,名称空间都命名为IO。

PS:这是和JavaScript在功能上最大的不同,也是前端需要node.js的原因


清理资源

当我们对文件进行读写操作的时候,注意我们是对文件进行了某种程度的“占有”的,即:不允许其他线程/进程对文件进行操作。比如:

  • A在写文件的时候,肯定是不允许B来读写这个文件的,这不乱套么?
  • A在读文件的时候,可能允许B来读这个文件

允许不允许是通过“锁(lock)”机制实现的。

  • 锁可以分类,比如读的时候加“读锁”,写的时候加“写锁”,
  • 读写之前都要检查文件上有没有被加锁,没有加锁才能操作,
  • 操作之前就要加锁
  • 加了读锁其他线程/进程就只能读不能写,加了写锁就……

这种“允许不允许”“加锁不解锁”都是由操作系统完成的,不需要我们应用开发人员操心。

通知操作系统

但是,我们要做一件事,而且千万能忘记:

告诉操作系统,我们的活干完了。

让操作系统解锁(又被称之为:释放/清理资源、关闭流/连接)

否则,@想一想@:会出现什么情况?

文件一直被独占,其他进程/线程无法访问,只有等待……等到天荒地老啊,同学们!

而且一般情况都不会直接报错,报错信息只能通过想要操作该文件的第三方反馈(被占用无法操作/等得太久超时timeout)

接口实现

为了解决这个问题,

  • Java设置了AutoCloseable接口,定义close()方法
  • C#设置了IDisposable接口,定义dispose()方法

让相关I/O类实现他们,然后采取一些特定语法(C#的using()和Java的try())帮助开发人员记得释放资源……


Stream和flush

因为缓冲机制的存在,有时候我们还是需要手动的把缓冲区里的数据“冲”到目标文件/内存中。

Java和C#首先提供了流(Stream)对象,用于传输数据。

然后在Stream中提供flush()方法,确保清空缓冲区内容。

有时候,如果忘记flush()方法,会导致文件未能接收到全部数据,也是一个很容易出bug的地方。


序列化

深入学习了对象之后,大家对序列化应该有了更深的认识。


#常见面试题:为什么需要序列化?

最典型的情形:

  • 一个对象A引用了另外一个对象B,A里面存放的是B的内存堆地址
  • 一旦这些二进制的数据转到文件/网络,内存堆地址还有用么?


序列化的方式方法很多,Java和C#都提供了内置的序列化机制。

也可以通过实现接口,实现自定义的序列化方法:

  • Java:Serializable
  • C#:ISerializable,并继承SerializableAttribute


绘图

因为我们项目有生成验证码的功能,需要绘图……

不管是使用绘图软件,还是代码控制,在计算机上绘制的图片的工具/过程大致都是一样的:

windows绘图板演示:

  1. 首先需要一张画布,画布需要设定好大小和底色
  2. 然后如果要画
    • 线条,就需要一只画笔,画笔可以确定线条的样式和颜色
    • 形状,就需要指定边框线条和内部填充
  3. 还需要坐标,如果是:
    • 点,直接指定位置
    • 直线,需要指定起始
    • 矩形,需要指定两个对角
    • 圆形,需要指定圆心和半径
    • ……

    坐标一般都是以左上角为原点

最后是将上述内容转化成各种相应的图片格式。


作业

  1. 现有一个email.txt文件,里面存放了若干email地址,使用分号(;)或者换行进行了分隔。请
    1. 删除其中重复的email地址,
    2. 并按每30个email一行(行内用;分隔)重新组织生成newEmail.txt
  2. 随机生成不同颜色的、包含干扰线条和点的验证码图片(注意:当你在循环中使用随机,有可能会出现一些你意想不到的事情,请查阅资料先予以解决)
  3. 将第2题代码进行重构,封装在类Captcha中(仔细考虑应该封装什么暴露什么,应该如何进行方法拆分等),并为其添加异常机制,要求能够:
    1. 显式的抛出一个自定义异常
    2. 捕获并包裹一个被抛出的异常,记入日志文件,然后再次抛出
    3. 根据不同的异常,给用户相应的友好的异常提示(控制台输出)
    4. 注意释放文件资源
学习笔记
源栈学历
大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 J&C 中继续学习:

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码