心得---字节流、文件操作、对象序列化
1. 抽象基类InputStream、OutputStream,不能实例化。
• InputStream类是基本的输入类。它定义了所有输入流所需的方法。
• publicabstract int read() throws IOException
• publicint read(byte b[]) throws IOException
• public int read(byte b[],intoffset,int length) throws IOException
功能为从输入流中读数据。这一方法有几种重载形式,可以读一个字节或一组字节。当遇到文件尾时,返回-1。最后一种形式中的offset是指把结果放在b[]中从第offset个字节开始的空间,length为长度。
• public int available() throwsIOException
输入流共有多少字节可读。注意此方法对InputStream的各派生类不一定都有效,有时会有返回零字节的错误结果。
• public void close() throwsIOException
关闭输入流并释放资源。虽然java提供垃圾回收机制,当一个流不再使用时可以由运行系统自动关闭,但为了提高程序的安全性和稳定性,建议使用close()关闭。
• public boolean markSupperted( )
返回布尔值,说明此流能否做标记或复位。
• public synchronized void mark(intreadlimit)
为当前流做标记。其参数说明在标记失效前可以读多少字节,这个值通常也就设定了流的缓冲区大小。
• public synchronized void reset()throws IOException
返回到上一次做标记处。
• public long skip (long n) throwsIOEnception
从输入流跳过几个字节。返回值为实际跳过的字节数
2.
PublicFileOutputStream(String name)throws FileNotFoundException
PublicFileOutputStream(File file)throws FileNotFoundException
PublicFileOutputStream(String name,Boolean append)throws FileNotFoundException
Name为文件名,file为文件类File对象,append表示文件是否为添加的写入方式,append默认为false,false时为重写方式,即从头写入,覆盖原来文件内容。
写的方法与读的一样。只不过这里用write。
3.
¯ 字节流可以操作任何数据
¯ 字符流使用的是字符数组;字节流使用的是字节数组
4.如果文件体积不是很大,可以这样操作。
byte[]buf = new byte[fis.available()];//创建一个刚刚好的缓冲区。但是这有一个弊端,就是文件过大,大小超出jvm的内容空间时,会内存溢出。
fis.read(buf);
System.out.println(new String(buf));
5. 文件类(File)
一个File类的对象,表示磁盘上的文件和目录。它提供了与平台无关的方法来对磁盘上的文件或目录进行操作,包括:更改文件名、删除文件、列出目录下的文件以及文件对象属性的描述信息等。
ü 构造方法
public File(String path);
public File(String path,String name);
public File(File parent,String chile);
例如:
File f1 = newFile(“data.txt”);
File f2 = newFile(“\\D:”,“data.txt”);
File f3 = newFile(“\\D:”);
File f4 = newFile(f3,“data.txt”);
ü 静态常量
由于不同操作系统的文件分隔符以及路径分隔符不同,因此,如果要获取当前系统的文件和路径的分隔符,可使用以下两个静态常量。
publicstatic final char separatorChar;
publicstatic final char pathSeparatorChar;
publicstatic final char separator;
ü 其它方法
(1).访问文件对象:
public StringgetName():返回文件对象名,不包含路径名
public StringgetPath():返回文件路径名,包含对象名
public StringgetAbsolutePath():返回文件绝对路径名,包含对象名
public StringgetParent():返回父文件对象名的路径名
public StringgetParentFile():返回父文件对象
public Booleanexists():测试指定的文件是否存在
public longlastModified():返回指定文件最后被修改的时间
public booleanrenameTo(Filedest):文件重命名
publicboolean mkdir():创建指定目录,正常建立时返回true
publicString[] list():返回目录中的所有文件名字符串
public FilelistFiles():返回指定目录中的所有文件对象
public class PandomAccessFile extends Object implementsDataOutput,DataInput
RandomAccessFile类可以对文件进行随机读写操作。
ü 创建一个RandomAccessFile对象
RandomAccessFile(File file,String mode) ;
RandomAccessFile(String name,String mode);
ü 读写数据的常用方法
读、写基本数据类型: readInt();writeInt(int n)等;
读、写UTF字符串: readUTF();writeUTF(String str);
读取文件中的一行: readLine();
ü 文件随机读写流的读取指针控制
long getFilePointer() ---得到当前的文件读取指针。
void seek(long pos) ---把指针从开始移动到pos位置。
long length() ---得到文件的长度(有多少个字节) 。
void setLength(long newLength)
7.对象流分为:对象输入流ObjectInputStream和对象输出流ObjectOutputStream
构造方法:
public ObjectInputStream()throws IOExcepetion,SecurityException
public ObjectInputStream(inputStream in)throws IOExcepetion,SecurityException
readObject():从ObjectInputStream读取对象。
8.序列化(Serialization)是指并行数据转换成串行数据的处理过程,而对象序列化(Object Serialization)是指把对象的状态数据以字节流的形式进行处理,一般用于实现完全的对象。简单的说序列化可以理解为使用I/O对象流类型实现的对象读写操作。
Java.io.ObjectOutputStream的writerObject()方法将内存中该对象的状态信息以有序二进制流(0、1序列)的形式输出到目标数据文件中,实现了信息的永久保存,这一工程即所谓的对象序列化。
对象序列化的主要任务是写出对象的状态信息,并遍历改对象建立一个对其他对象的引用,递归的序列化所有被引用的其他对象。
注意:并不是任何引用类型的数据(对象)都可以被序列化,只有实现了java.io.Serializable接口的类的对象才可以序列化,这主要出于安全性考虑,一些封装敏感信息或时效性很强的信息的类则不建议支持序列化,以避免出现泄漏或消息失效问题。在java语言规范中规定了Serializable接口的实现类均应该提供无参的构造方法,以供可能的反序列化操作,系统重建对象时自动调用,不过这一规则并未得到严格的贯彻。
在对象序列化的过程中,其所属类的static属性和方法代码是不会被序列化的,因为static属性为整个类共有,不应因一个对象的“沉浮”而受影响,而方法代码是一成不变的,反序列化时只要在运行环境中找到一份其所属的类文件即可(注意必须是当初序列化操作时使用的同一版本.class文件,如果中间进行过修改并重新编译,则反序列化时会出错)对于个别不希望被序列化的非static属性(实例变量),也可以在属性声明时使用transient关键字进行表明。
在序列化时static和transient属性均被略过,反序列化重构对象时,对象的这些属性被默认初始化和显示初始化处理。其中static属性如果已经存在,则维持原状,不再进行初始化处理。
转载于:https://www.cnblogs.com/yangkai-cn/archive/2012/05/15/4017541.html
心得---字节流、文件操作、对象序列化相关推荐
- VBScript文件操作对象FileSystemObject大全
基本运算 + 数字加法及字符串连接 - 数字减法 * 数字乘法 / 数字除法 Mod 求余数 \ 求商数 & 字符串连接 ^ 次方 = 相等 <> 不相等 >= 大于或等于 ...
- uniapp 流文件pdf_uniapp写入字节流文件bytes
1. //文件的写入操作传入要写入文件名,base64 function lzFileWriter(base64,fileName) { return new Promise((result,reje ...
- Learn day3 深浅拷贝/格式化/字符串/列表/字典/集合/文件操作
1. pass break continue # ### pass break continue # (1) pass 过 """如果代码块当中,什么也不写,用pass来 ...
- plist文件读写,序列化与反序列化,文件的读写[xcode4.4.1]
这篇学习目标: plist文件读写 对象序列化与反序列化 本地文件的读写 iCloud存储的API 引言 在做iOS开发时,经常用到到plist文件, 那plist文件是什么呢? 它全名是:Prop ...
- HTML5 本地文件操作之FileSystemAPI整理(二)
一.文件目录操作 1.DirectoryEntry对象 属性: 1.isFile: 操作对象的是否为文件,DirectoryEntry对象固定其值为false 2.isDirectory: 操作对象是 ...
- python中csv文件操作_python中操作csv文件
python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...
- HTML5 本地文件操作之FileSystemAPI整理(一)
一.请求配额 DeprecatedStorageInfo对象 window.webkitStorageInfo:当使用持久存储模式时需要用到该对象的接口 方法: 1.requestQuota(type ...
- 【python教程】IO文件操作的常见用法
首先创建一个文件操作对象: f = open(file, mode, encoding) file指定文件的路径,可以是绝对路径,也可以是相对路径 文件的常见mode: mode = "r& ...
- python文件操作的一般步骤_Python基础之文件操作
应用程序运行过程中产生的数据最先都是存放于内存中的,若想永久保存下来,必须要保存于硬盘中.应用程序若想操作硬件必须通过操作系统,而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念,用户或应用程序 ...
- Python中的文件操作和异常
Python中的文件操作和异常 文章目录 Python中的文件操作和异常 一.文件 01. 文件的概念 1.1 文件的概念和作用 1.2 文件的存储方式 文本文件和二进制文件 02. 文件的基本操作 ...
最新文章
- C++类成员函数重载问题
- 基于机器学习的捡球机器人设计与实现(探索)第3篇——opencv基础知识学习(2019-02-02)
- 大商超的2020:转型、收紧、试新
- Spring Boot AOP记录用户操作日志
- JAVA入门级教学之(对象和引用)
- matlab中instr,MATLAB 串口通信
- Linux shell 字符串匹配
- python怎么调用接口失败_python 调用接口
- PyCharm——如果不小心修改了第三方库文件,怎么办?
- 吊炸天!15岁成杀人犯,监狱里学编程,37岁获释后年薪70万
- 数组中大于等于左侧所有数,小于等于右侧所有数的数
- 我的世界1.12.2java下载_我的世界1.12.2电脑版下载
- 番茄时间管理法(Pomodoro Technique):一个番茄是如何让你工作更有效率的
- 股票python量化交易002-常见量化指标(基本面)
- 人才测评技术与应用【2】
- 吴恩达深度学习笔记-布置机器学习项目(第4课)
- 互联网晚报 | 2月16日 星期三 | 小米回应裁员10%传闻;中国冬奥军团金牌数和奖牌数创新高;马斯克捐赠57亿美元特斯拉股票...
- XStream使用方法
- 深度学习之PyTorch——Deep NN实现手写MNIST数字分类
- 苯酚物理化学性质及用途