IO复习
来源:互联网 发布:amd游戏优化档案 编辑:程序博客网 时间:2023/12/03 08:24
总介
i是input 输入 读,o是output 写
使用IO流中的输入流和输出流,对文件或者文件夹进行读和写,(使用buffer缓冲流可以提高流的读写的性能)
1.递归
递归其实就是方法调用方法本身自己。
例如文件夹里有文件夹,文件夹里套了文件,就可以用递归来做到读出里面的文件目录
代码如下:
package com.zking.io;
import java.io.File;
public class TestDiGui {
public static void main(String[] args){
File f=new File("C:\\Users\\Administrator\\Desktop\\a");
read(f);
}
public static void read(File f){
if(f.isDirectory()){
//列出该文件夹下的所有文件
File files[]=f.listFiles();
if(files.length>0){
//判断有子目录或者子文件
for(File file :files){
if(file.isDirectory()){
read(file);
}else{
System.out.println(file.getAbsolutePath());
}
}
}else{
//没有子目录或者子文件
System.out.println(f.getAbsolutePath());
}
}else{
System.out.println(f.getAbsolutePath());
}
}
}
2.本地文件复制
一种是得到一个文件,读完文件,再把这个文件写到另一个地方
另一种就是用jar包进行
3.多线程下载
顾名思义就是使用多个线程进行文件下载,这种方法可以提高下载的速度
原理:
服务器端
(1)
文件的大小:fileSize 线程数量 :threadSize
singleThreadNum
(2)计算每个线程下载的大小:
单个线程下载的大小:singleThreadNum的公式就是:如果 fileSize % threadSize==0
那么singleThreadNum=fileSize/threadSize 否则就是 singleThreadNum=fileSize/threadSize+1
(假如文件大小为10,有三个线程,那么每个线程下载的大小就是4,一号线程下载4,二号线程下载4,最后剩下2,那么三号线程就下载2)
(3)计算完每个线程下载的大小,就开始计算每个线程下载的开始位置和结束位置
threadIndex:线程下标,从0开始
开始位置:int startPosition=threadIndex*singleThreadNum
结束位置 int endPosition=(threadIndex+1)*singleThreadNum-1
(4)那么就可以开始计算每个线程从哪里下载到哪里
Range startPosition-endPosition
客户端
在本地创建文件,文件大小要求和服务器中文件的大小一样,就可以下载到本地的位置了
4.序列化和反序列化
代码如下
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import com.zking.entity.Person;
public class TestSer {
public static void main(String[] args) {
//序列化(将对象 存到硬盘中)
Person person=new Person("admin", "123");
try {
//序列化
// ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("user.exe"));
// oos.writeObject(person);
// oos.close();
//反序列化(将存档从硬盘中读出来)
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("user.exe"));
Person person2=(Person) ois.readObject();
System.out.println(person2);
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
- io复习
- io复习
- IO复习
- IO复习
- IO复习
- java的IO复习
- Java IO复习
- io复习笔记
- java基础复习 IO
- IO知识复习四
- IO知识复习五
- io流复习
- JAVA IO 复习
- 复习IO流
- 复习一下io流:
- JAVA中IO复习
- 1.IO复习
- Java IO复习
- springMVC 中获取session方法
- CakePHP FAQ(常见问题)整理
- 整数划分(递归)
- Go Tracing Roadmap
- io流 的简单回顾
- IO复习
- jsp登陆验证码
- Linux_FastDFS 安装笔记
- 做的非常不错的网站
- IO
- String、StringBuffer、StringBuilder区别
- Python 请用sorted对上述列表按名字和分数排序
- python DEAP学习2(遗传算法) 最大值问题
- Freeline