甘肃手机版建站系统信息seo云优化外包
1. IO 种类
-
定义
在 Java 里,IO(输入 / 输出)主要分为字节流和字符流这两种类型。字节流以字节为单位处理数据,适合处理二进制数据,像图片、音频、视频等;字符流以字符为单位处理数据,适用于处理文本数据。
-
要点
- 字节流处理二进制数据,字符流处理文本数据。
- 字节流的基类是
InputStream
和OutputStream
,字符流的基类是Reader
和Writer
。
-
应用
在实际开发中,读取图片等二进制文件用字节流,读取文本文件用字符流。比如读取配置文件、保存图片等场景。
-
代码示例
java
import java.io.*;public class IODemo {public static void main(String[] args) {// 字节流示例:复制图片try (FileInputStream fis = new FileInputStream("input.jpg");FileOutputStream fos = new FileOutputStream("output.jpg")) {int byteRead;while ((byteRead = fis.read()) != -1) {fos.write(byteRead);}} catch (IOException e) {e.printStackTrace();}// 字符流示例:读取文本文件try (FileReader fr = new FileReader("input.txt");BufferedReader br = new BufferedReader(fr)) {String line;while ((line = br.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();}}
}
2. 先进先出置换算法(FIFO)
-
定义
FIFO 是一种页面置换算法,当内存空间不足时,该算法会选择最先进入内存的页面进行置换。
-
要点
- 简单易实现,只需一个队列记录页面进入内存的顺序。
- 可能出现 Belady 异常,即增加页面帧数时,缺页率反而增加。
-
应用
在一些对内存管理要求不高的简单系统中使用,例如早期的一些小型操作系统。
-
代码示例
java
import java.util.LinkedList;
import java.util.Queue;public class FIFOPageReplacement {public static int pageFaults(int[] pages, int capacity) {Queue<Integer> queue = new LinkedList<>();int pageFaults = 0;for (int page : pages) {if (!queue.contains(page)) {if (queue.size() == capacity) {queue.poll();}queue.add(page);pageFaults++;}}return pageFaults;}public static void main(String[] args) {int[] pages = {1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5};int capacity = 3;System.out.println("Page faults: " + pageFaults(pages, capacity));}
}
3. 最近最久未使用(LRU) 算法
-
定义
LRU 算法是一种页面置换算法,它会选择最近最久未使用的页面进行置换。
-
要点
- 性能较好,能较好地反映程序的局部性原理。
- 实现相对复杂,需维护一个链表记录页面的使用顺序。
-
应用
常用于缓存系统,如浏览器缓存、数据库缓存等,以提高数据的访问效率。
-
代码示例
java
import java.util.LinkedHashMap;
import java.util.Map;public class LRU