灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:4542回复:0

java--URL输入流

楼主#
更多 发布于:2012-09-08 09:36


除了基本的文件访问之外,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.atcpu.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;
}


喜欢0 评分0
游客

返回顶部