哈~终于把画图板的两种保存方式搞定了~谈谈我对于这个的理解~

我们的程序都运行的时候,数据都是存储在内存里的~对吧~

 

就像我的那个画图板,不管画多少图形,只要把程序一关掉~那些数据就没了~所以必须要在硬盘(永久存储介质)上保存成数据文件~(╮(╯▽╰)╭这不是废话么……)

 

把内存中的数据写入硬盘上的文件或者从文件读取到内存,就要用到“流”。“流” 就和水管子一样,数据从内存流到文件,从文件流到内存。流分为输入流和输出流:输入流是把数据输入到内存中的流,输出流就是把数据从内存中输出的流,输入输出都是相对与内存而言的~不要搞混了哦~

 

经过学习,我的画图板最开始时以队列的方式存储每一个图形,画板重绘的时候就是从队列中依次把之前画的图像提取出来。

所以保存的时候最先用的是以队列的形式把画图板的图形保存到文件中。

因为当时做简单画板的时候用的并不是java里面提供的现成的队列(List),而是自己自定义的一个队列,所以刚开始的时候还遇到了个麻烦:

    通过查阅JDK文档,发现了ObjectInputStream 这个流可以把任意对象写入文件~所以就用了这个流,可是一运行就报错,以前没有见过,具体是什么记不得了,只知道我问了一个学长,他告诉我报这个错是因为我自定义的类没有实现Serializable这个接口,而凡是要通过ObjectInputStream保存的对象的类都要实现Serializable这个接口~哈~这下我学习了~

一开始我写的是直接把流写入文件,但是速度奇慢……而且CPU占用几也很高。如图:

 


哈~终于把画图板的两种保存方式搞定了~谈谈我对于这个的理解~_第1张图片

 

 

后来加入了缓冲流,以上两个问题得到了改善。

但是当图形对象很多的时候,保存速度还是慢……以打开为例,如图:

 

 


哈~终于把画图板的两种保存方式搞定了~谈谈我对于这个的理解~_第2张图片

 

这使我们的第二中保存方式——把像素都保存到数组里面的方法优势就出来了~同样以打开为例:

 

 


哈~终于把画图板的两种保存方式搞定了~谈谈我对于这个的理解~_第3张图片

 

时间减少了不少吧~~

 

 

但是,当对象比较少的时候队列的速度就快了,而像素方式的速度没有多少改变(正常情况~因为不管有多少图形对象,像素方式都会把整个画布上的像素保存一遍,所以速度上没什么变化):例如:

 

以队列保存:

 


哈~终于把画图板的两种保存方式搞定了~谈谈我对于这个的理解~_第4张图片

 

以像素数组保存:

 

 


哈~终于把画图板的两种保存方式搞定了~谈谈我对于这个的理解~_第5张图片

 

计算机中的真正的BMP(位图)文件大概就是像上面说的数组保存的方式,不过还是有区别的~

等学到了再说~哈~~

 

你可能感兴趣的:(画图板)