IO流

输入输出流

在java中,输入和输出都被称之为抽象的流,流可以看作是一组有序的字节集合,即数据在两设备之间的传输。主要的作用是为了改善程序性能并且使用方便。

流可以分为两大类:字节流和字符流。字节流以字节为单位(8bit),字符流以字符为单位(16bit)。两者之间的最主要的区别在于字节流在处理输入输出时不会用到缓存,而字符流用到了缓存。



IO流 字符流 Reader BufferReader  
InputStreamReader FileReader
StringReader  
PipedReader  
ByteArrayReader  
FilterReader   PushbackReader
     
Writer BufferWriter  
OuterStreamWriter FileWriter
StringWriter  
PipedWriter  
ByteArrayWriter  
FilterWriter  
 
字节流 InputStream  FileInputStream  
FilterInputStream BufferedInputStream
DataInputStream
PushbackInputStream
ObjectInputStream  
PipedInputStream  
SequenceInputStream  
StringBufferInputStream  
ByteArrayInputStream   
     
OutputStream FileOutputStream  
FilterOutputStream BufferedOutputStream
DataOutputStream
PrintOutputStream
ObjectOutputStream  
PipedOutputStream  
ByteArrayOutputStream  

管理文件和目录

java通过File类来管理文件和文件夹。常用的File类中的方法如下:
方法 作用
File(String pathname) 根据指定的路径创建一个File对象
createNewFile() 若文件或目录存在,则返回false,否则创建
文件或文件夹
delete() 删除文件或文件夹
isFile() 判断这个对象表示的是否是文件
isDirectory() 判断这个对象表示的是否是文件夹
listFiles() 若对象代表目录,则返回
目录中所以文件的File对象
makdir() 根据当前对象指定的路径创建目录
exists() 判断对象对应的文件是否存在
例:如何列出某个目录下的所有的目录和文件?
如果假设目录:“C:\\testDir1”下有两个文件夹(dir1和dir2)和一个文件file1.txt,实现代码如下:
import java.io.File;
public class Test{
	public static void main(String[] args){
		File file = new File("C:\\testDir");
		//判断目录是否存在
		if(!file.exits()){
			System.out.println("directory is empty");
			return;
		}
		File[] fileList = file.listFile();
		for(int i = 0;i<fileList.length;i++){
			//判断是否为目录
			if(fileList[i].isDirectory()){
				System.out.println("directory is:"+fileList[i].getName());
			}else{
				System.out.println("file is:"+fileList[i].getName());
			}
		}
	}
}

Java Socket

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket也称之为套接字,可以实现不同虚拟机或不同计算机之间的通信。
Socket可以分为两种类型:面向连接的Socket(TCP,传输控制协议)和面向无连接的Socket(UDP,用户数据报协议)。任何一个Socket都是有IP地址和端口号唯一确定的。
Socket的生命周期可以分为3个阶段:打开Socket、使用Socket收发数据和关闭Socket。

Java序列化

序列化可以将对象的状态写在流里进行网络传输,或者保证到文件、数据库等系统里,并在需要时把该流读取出来重新构造一个相同的对象。


如何实现序列化:

要实现序列化都必须实现Serializable接口,该接口位于java.lang包中,它里面没有包含任何方法。使用一个输出流来构造一个ObjectOutputStream(对象流)对象。紧接着,使用该对象的writerObject方法就可以将obj对象写出,要恢复时使用其对应的输入流。

特点:

1.如果一个类能被序列化,那么它的子类也能够实现序列化

2.由于Static代表类的成员,transient(Java关键字,用其声明一个实例变量,当对象存储时,它的值不需要维持)代表对象的临时数据,因此被声明为被这两种类型的数据成员是不能够被序列化的。


使用场景:

1.需要通过网络来发送对象,或对象的状态需要被持久化到数据库或文件中

2.序列化能够实现深复制,即可以复制引用的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值