0809(027天 IO周考+IO模块大作业停车收费系统)
每日一狗(旺名)
大标题
1. IO周考
1、BIO、NIO和AIO之间的区别
BIO:数据的写入必须阻塞在一个线程内等待其完成(等水烧开)
BIO:一个线程不断的轮询每一个输入输出的状态改变,如果有状态发生了改变,则进行下一步的操作(时不时回来看一看水烧开没)
AIO:无锡一个线程轮询所有的IO操作的状态改变,在相应的状态改变后,系统会通知对应的线程来处理。(等水烧开了,水壶会通知我来处理)
2、深浅克隆的区别
- 深克隆:会生成一个完全独立于源对象的对象,互不向干涉
- 浅克隆:只会克隆一层数据,对于引用数据类型只会将其引用进行拷贝,两个对象公用通过一组引用数据类型
3、什么是序列化,如何实现Java序列化
- 通过某种方法将一个对象的存储区域转换成二进制流方便存储
- 实现
- 实现Serializable接口
- 可以对无法序列化的数据进行标记让其不参与序列化
ransient
- 可以对无法序列化的数据进行标记让其不参与序列化
- 实现Externalizable
- 需要实现一个序列化方法,一个反序列化方法以达到自定义序列化方法的目的
- 实现Serializable接口
4、编码实现一个任意文件夹的拷贝
package com.yang1;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class 文件拷贝 {
private static String sourcePath = "D:\\桌面\\20220808";
private static String targetPath = "D:\\桌面\\copy";
public static void main(String[] args) {
copyDir(new File(sourcePath));
}
public static void copyDir(File file) {
File targetFile = new File(file.getAbsolutePath().replace(sourcePath, targetPath));
if (file.exists()) {
if (file.isDirectory()) {
if (!targetFile.exists()) {
targetFile.mkdirs();
}
File[] fs = file.listFiles();
if (fs != null && fs.length > 0) {
for (File tmpF : fs) {
copyDir(tmpF);
}
}
} else if (file.isFile()) {
copyFile(file, targetFile);
}
}
}
private static void copyFile(File file, File targetFile) {
System.out.println(file + "-->" + targetFile);
try (InputStream is = new FileInputStream(file); OutputStream os = new FileOutputStream(targetFile)) {
while (true) {
int c = is.read();
if (c == -1) {
break;
}
os.write(c);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
5、统计一个文件calcCharNum.txt中各个字符出现次数:A(8),B(16),C(10)…,a(12),b(10),c(3)…,括号内代表字符出现次数,要求按照出现次数从小到达排序输出。如果是回车符则按照空格符处理
//======== 字符数据类 ========
package com.yang1;
public class MyChar {
private char ch;
private int count;
public MyChar(char ch) {
this.ch = ch;
count = 1;
}
public void pusOne() {
count++;
}
public char getCh() {
return ch;
}
public int getCount() {
return count;
}
@Override
public String toString() {
return ch + "[" + count + "]";
}
}
// ========= 变长数组 =========
package com.yang1;
public class ArrayList {
private MyChar[] arr;
private int count;
public ArrayList() {
this(10);
}
public ArrayList(int length) {
if (length < 2) {
length = 10;
}
this.arr = new MyChar[length];
this.count = 0;
}
public void show() {
for (int i = 0; i < count; i++) {
System.out.println(arr[i]);
}
}
public void sorted() {
for (int i = 1; i < count; i++) {
for (int j = 0; j < count - i; j++) {
if (swap(arr[j], arr[j + 1])) {
MyChar tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
private boolean swap(MyChar c1, MyChar c2) {
boolean res = c1.getCount() < c2.getCount();
if (!res && c1.getCount() == c2.getCount()) {
res = c1.getCh() > c2.getCh();
}
return res;
}
public void add(char ch) {
int index = indexOf(ch);
if (index < 0) {
if (count == arr.length) {
swell();
}
arr[count++] = new MyChar(ch);
} else {
arr[index].pusOne();
}
}
private int indexOf(char ch) {
int res = -1;
for (int i = 0; i < count; i++) {
if (ch == arr[i].getCh()) {
res = i;
break;
}
}
return res;
}
private void swell() {
MyChar[] newArr = new MyChar[count * 3 / 2];
System.arraycopy(arr, 0, newArr, 0, count);
arr = newArr;
}
public MyChar[] getArr() {
return arr;
}
public int getCount() {
return count;
}
}
// ============ 文件读取统计展示 ==========
package com.yang1;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
public class 统计字符出现次数 {
public static void main(String[] args) {
ArrayList arr = new ArrayList(20);
File file = new File("data/data.txt");
if (file.exists()) {
try (Reader fr = new FileReader(file)) {
while (true) {
int i = fr.read();
if (i < 0) {
break;
}
if (i == '\n' || i == '\t' || i == '\r') {
i = ' ';
}
arr.add((char) i);
}
} catch (Exception e) {
e.printStackTrace();
}
}
arr.sorted();
arr.show();
}
}
2. IO流模块大作业
停车场有进场和出场的功能
进场时:采用键盘录入的方式,录入汽车的品牌、颜色、车牌号。把品牌、颜色、车牌号,以及进场时间写入car.txt文件中。
出场时:键盘录入车牌号,去文件中查找该车的进场时间,并计算停车时间。30分钟内免费,过后每小时3元,超过1小时后再超过15分钟按一小时计算,15分钟以内不额外计费。
名词:停车场、车(品牌、颜色、车牌号。把品牌、颜色、车牌号)、停车时间
动词:进场、出场、键盘录入、文件写入
对象
- 停车场:
- 逻辑停车场:
- 存储停车场:
- 汽车
- 汽车对象
- 汽车停车记录
存储
- ./data/cat.txt:存储未被取出的车辆信息
- ./data/history.txt:存储已经被取出的(订单信息)