当前位置:编程学习 > JAVA >>

URL输入流

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

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

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

[java]
java.net.URL imageSource; 
try{  
    imageSource = new URL("http://mysite.com/~info"); 
}catch(MalformedURLException e) {}  
    images[0] = getImage(imageSource, "Duke/T1.gif"); 
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对象按照与数据输入输出对象相同的方式来读写信息。你可以访问在DataInputStrem和DataOutputStream中所有的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接口的对象不能被保持。

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

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

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

[java]
public class MyClass implements Serializable { 
    public transient Thread myThread; 
 
    private String customerID; 
 
    private int total; 

public class MyClass implements Serializable {
 public transient Thread myThread;

 private String customerID;

 private int total;
}

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

[java]
public class MyClass implements Serializable { 
    public transient Thread myThread; 
    private transient String customerID; 
    private int total; 

 

摘自  java教程
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,