URL输入流

除了基本的文件访问之外,Java技术提供了使用统一资源定位器(URL)来访问网络上的文件。当你使用AppletgetDocumentBase()方法来访问声音和图象时,你已经隐含地使用了URL对象。

String imageFile = new String ("images/Duke/T1.gif");
	images[0] = getImage(getDocumentBase(), imageFile);

当然,你也可以直接使用URL如下:

java.net.URL imageSource;
try{ 
	imageSource = new URL("http://mysite.com/~info");
}catch(MalformedURLException e) {} 
	images[0] = getImage(imageSource, "Duke/T1.gif");

你经常会发现你只想读取文件的一部分数据,而不需要从头至尾读取整个文件。你可能想访问一个作为数据库的文本文件,此时你会移动到某一条记录并读取它的数据,接着移动到另一个记录,然后再到其他记录――每一条记录都位于文件的不同部分。Java编程语言提供了一个RandomAccessFile类来处理这种类型的输入输出。

创建一个随机访问文件

你可以用如下两种方法来打开一个随机存取文件:

用文件名

myRAFile = new RandomAccessFile(String name, String mode);

用文件对象

myRAFile = new RandomAccessFile(File file, String mode);

mode参数决定了你对这个文件的存取是只读(r)还是读/(rw)

例如,你可以打开一个数据库文件并准备更新:

RandomAccessFile myRAFile;

myRAFile = new RandomAccessFile("db/stock.dbf","rw");

存取信息

RandomAccessFile对象按照与数据输入输出对象相同的方式来读写信息。你可以访问在DataInputStremDataOutputStream中所有的read()write()操作。

Java编程语言提供了若干种方法,用来帮助你在文件中移动。

long getFilePointer();返回文件指针的当前位置。

void seek(long pos); 设置文件指针到给定的绝对位置。这个位置是按照从文件开始的字节偏移量给出的。位置0标志文件的开始。

long length()返回文件的长度。位置length()标志文件的结束。

添加信息

你可以使用随机存取文件来得到文件输出的添加模式。

myRAFile = new RandomAccessFile("java.log","rw");

myRAFile.seek(myRAFile.length());

对象串行化

java.io.Serializable接口支持将一个Java技术对象存放到一个流中。

将一个对象存放到某种类型的永久存储器上称为"保持"。如果一个对象可以被存放到磁盘或磁带上,或者可以发送到另外一台机器并存放到存储器或磁

盘上,那么这个对象就被称为可保持的。

java.io.Serializable接口没有任何方法,它只作为一个"标记",用来表明实现了这个接口的类可以串行化。类中没有实现Serializable接口的对象不能被保持。

当一个对象被串行化时,只有对象的数据被保存;方法和构造函数不属于串行化流。如果一个数据变量是一个对象引用,那么这个对象的数据成员也会被串行化。树或者对象数据的结构,包括这些子对象,构成了对象图。

因为有些对象类所表示的数据在不断地改变,所以它们不会被串行化;例如,java.io.FileInputStream java.io.FileOutputStreamjava.lang.Thread等流。如果一个可串行化对象包含某个不可串行化元素的引用,那么整个串行化操作就会失败,而且会抛出一个NotSerializableException

如果对象图包含一个不可串行化的引用,只要这个引用已经用transient关键字进行了标记,那么对象仍然可以被串行化。

public class MyClass implements Serializable {
	public transient Thread myThread;

	private String customerID;

	private int total;
}

域存取修饰符对于被串行化的对象没有任何作用。写入到流的数据是字节格式,而且字符串被表示为UTF(文件系统安全的通用字符集转换格式)transient关键字防止对象被串行化。

public class MyClass implements Serializable {
	public transient Thread myThread;
	private transient String customerID;
	private int total;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值