- 浏览: 1590227 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
java之 21天 随机读取文件,管道流,序列化
- 博客分类:
- Java
对象持久化 ,序列化, 串行化
管道流
随机访问文件的类
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; /** * 对象持久化 ,序列化, 串行化 * 直接操作对象的流 * ObjectOutputStream * ObjectInputStream * * Serializable:没有方法的接口 :通常 称为 标记接口 , 序列化只能 序列化 堆里面的对象属性 * * 注意: * 1)静态成员: 不能被序列化,因为 静态在方法区里面 ,不再 堆里面, * 2)transient: 修饰静态成员, 使它不被序列化 * */ public class ObjectStreamDemo { public static void main(String[] args) throws Exception { //method(); //readObj(); writeObj(); readObj(); //斯蒂芬::59::cn 发现 country 属性没有被序列化进去 } public static void writeObj() throws IOException{ ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("E:\\person.object")); oos.writeObject(new Person("斯蒂芬",59,"kr")); oos.close(); } //序列化 public static void method() throws IOException{ ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("E:\\person.object")); oos.writeObject(new Person("lisi",39)); oos.close(); } //反序列化 public static void readObj() throws IOException, ClassNotFoundException{ ObjectInputStream ois= new ObjectInputStream(new FileInputStream("E:\\person.object")); Person p=(Person)ois.readObject(); System.out.println(p); ois.close(); } } //要序列化的类 都必须 实现这个接口 class Person implements Serializable{ //必须 生成一个 UID 否则会有序列化后,再反序列 就会有问题. private static final long serialVersionUID = 7457608434653264123L; private String name; // transient private int age; //如果想要非静态成员也不序列化 就使用个 transient 修饰, 但是保证 堆中有 static String country="cn"; //静态 成员不能被序列化 Person(String name,int age){ this.name=name; this.age=age; } Person(String name,int age,String country){ this.name=name; this.age=age; this.country=country; } public String toString(){ return name+"::"+age+"::"+country; } }
管道流
import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; /** * 管道流 * PipedInputStream 管道读取流 * PipedOutputStream 管道写入流 * * 联合两者的关系 * 1)通过构造函数 :PipedInputStream(PipedOutputStream src) * 2)使用方法: void connect(PipedOutputStream src) 进行连接 * * * 总结 :: * 集合中涉及到 IO流的 是properties * IO中涉及到多线程的就是 管道流 * */ public class PipedStreamDemo { public static void main(String[] args) { // TODO Auto-generated method stub try { PipedInputStream pin=new PipedInputStream(); PipedOutputStream pon=new PipedOutputStream(); pin.connect(pon); ReadPiped rp=new ReadPiped(pin); WritePiped wp=new WritePiped(pon); new Thread(rp).start(); new Thread(wp).start(); } catch (IOException e) { e.printStackTrace(); } } } //读取管道流 class ReadPiped implements Runnable{ private PipedInputStream in; ReadPiped(PipedInputStream in){ this.in=in; } public void run(){ try { System.out.println("读取前没有数据就阻塞...."); byte[] buf=new byte[1024]; int len=in.read(buf); System.out.println("读到数据阻塞结束"); String s=new String(buf,0,len); System.err.println(s); in.close(); } catch (IOException e) { throw new RuntimeException("管道读取流失败!"); } } } //写入管道流 class WritePiped implements Runnable{ private PipedOutputStream out; WritePiped(PipedOutputStream out){ this.out=out; } public void run(){ try{ System.out.println("6秒后开始写入数据..."); Thread.sleep(6000l); out.write("Piped lai la".getBytes()); out.close(); }catch(IOException e){ e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
随机访问文件的类
import java.io.IOException; import java.io.RandomAccessFile; /** * RandomAccessFile: 随机访问文件的类 * 特点: * 1)该类 不算IO体系中的子类 ,而是 直接继承 Object * 2)但,是IO包中的成员 * 3)同时具备 读和写的功能. * 4)内部封装了一个数组,而且通过指针对数组的元素进行操作. * 5)可以通过 getFilePointer获取指针的位置 * 6)可以通过seek改变指针的位置 * * * seek(long pos) : 跳到指定的索引位置上 * skipBytes(int n): 跳过指定的 字节数 * * 其实能够完成 读写的原因,就是内部封装了字节输入流和输出流. * * 通过构造函数 可以看出 ,该类只能操作 文件.mod 只能 4中值 * r:读 * rw:读写 * 而且该对象构造函数要操作的文件不存在,会自动创建, 如果存在会覆盖 . * * 如果模式为r:只读,不会创建文件,会去读取一个已经存在的文件,如果文件不存在,则会出现异常. * 如果模式为rw: 操作的文件不存在,会自动创建,如果存在 则不会覆盖文件,但是会替换对应位置上的文件 * * 多线程 下载和写入 * 可以实现,文件的分段写入 ,和下载 */ public class RandomAccessFileDemo { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub System.out.println("不存在就创建,然后写,存在就会覆盖,"); //writeFile(); //System.out.println(Integer.toBinaryString(258)); // 100000010--00000010(write 只将最低8位 写入流中) System.out.println("跳过指定的字节后再读"); //readFile(); System.out.println("跳过指定的字节后再写"); writeFile_2(); } public static void writeFile_2() throws IOException{ RandomAccessFile raf=new RandomAccessFile("E:\\ran.txt","rw"); //第三个 不知道 写什么 但是第四个知道写什么 //raf.seek(8*3); raf.write("周期".getBytes()); raf.writeInt(444); raf.close(); } public static void readFile() throws IOException{ RandomAccessFile raf=new RandomAccessFile("E:\\ran.txt","r"); //raf.write("haha".getBytes()); //java.io.IOException: 拒绝访问。 byte[] buf=new byte[4]; //调整指针, 如果是有序 就这样就可以了 //raf.seek(8*1); //跳到指定的索引, 取到的就是 王武了,否则 从头开始取 李四 raf.skipBytes(8); //跳过指定的字节数 只能 往下跳, 不会回跳 raf.read(buf); String name=new String(buf); int age=raf.readInt(); //自动读取 4个字节转换成 int System.out.println("name:"+name+"----age:"+age); raf.close(); } public static void writeFile() throws IOException{ RandomAccessFile raf=new RandomAccessFile("E:\\ran.txt","rw"); raf.write("GGG".getBytes()); //raf.write(97); //存入后 变成 a 因为 是 97 对应的码表是 a raf.writeInt(97); //存入后 变成 a 因为 是 97 对应的码表是 a //raf.writeInt(258); // 前面有三空格 ,3个字节是空的 写出了4个字节 raf.write("KKK".getBytes()); raf.writeInt(99); // raf.close(); } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 998public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2282经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5654package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 987import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1055/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1009//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1826更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1417import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 816import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2397import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 925// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1173import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 802import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1145import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3893import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 965/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1023import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1842Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1005/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2230package out; import ja ...
相关推荐
4. **反序列化**:读取文件流中的数据以恢复对象状态。 ```delphi var BinaryReader: TBinaryReader; begin BinaryReader := TBinaryReader.Create(FileStream); try // 使用BinaryReader读取数据 finally ...
根据给定的文件信息,我们可以总结出一系列关于Java中读取文件的方法,这些方法涵盖了不同层次的数据读取,包括字节、字符以及行级别的读取。以下是对这些知识点的详细阐述: ### Java读取文件方法大全:读取File流...
总结起来,Java中按顺序读取文件主要依赖于I/O流,特别是`FileReader`和`BufferedReader`类的组合。理解这些基本概念和操作对于任何Java开发者来说都是至关重要的,因为它们构成了处理文件数据的基础。在实际编程中...
本文将详细介绍Java中四种不同的文件读取方法:按字节读取、按字符读取、按行读取以及随机读取。 1. **按字节读取文件内容** Java中`java.io.FileInputStream`类提供了按字节读取文件的功能。这种方法适用于读取二...
在Java编程中,读取随机文件是一项常见的任务,特别是在处理大型数据文件时。要实现这一功能,我们需要了解Java中的I/O流(输入/输出流)和文件操作的相关知识。这里我们将详细探讨如何在Java中读取随机文件。 首先...
Java保存与读取文件代码示例,super("存储与读取对象"); //调用父类构造函数 Container container=getContentPane(); //得到容器 Icon imageIcon=new ImageIcon("image.gif"); //实例化一个图标 ...
同样,它也可以从文件读取字节流并反序列化为原来的对象。直接保存和读取简单,但不适用于跨平台环境,且不易于人类阅读。 ```csharp using System.IO; using System.Runtime.Serialization.Formatters.Binary; ...
java随机读取文件内容,打开一个随机访问文件流,按只读方式,将读文件的开始位置移到beginIndex位置。一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
在Java NIO(New IO)框架下,文件流管道(Pipe)是一种用于在两个线程之间传递数据的机制,它允许一个线程写入数据,而另一个线程读取这些数据。文件通道(FileChannel)是与文件交互的主要接口,它提供了管道传输...
- 使用 `java.io.ObjectInputStream` 类的 `readObject()` 方法从输入流读取对象,实现反序列化。 4. **序列化版本标识符** - `serialVersionUID` 是一个特殊的字段,用于验证序列化版本的一致性。如果类的序列化...
【JAVA对象序列化保存为XML文件的工具类】 在Java编程中,对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。而在反序列化时,这个字节流又可以恢复为原来的对象。Java提供了一个方便...
根据提供的文件标题、描述以及部分代码内容,我们可以总结出该文档主要关注的是Java中的序列化技术,特别是如何利用序列化来存储和读取文件。接下来,我们将深入探讨这些知识点。 ### Java序列化简介 Java序列化是...
java随机读取一行文本,避免了网上其他版本乱码的烦恼~!
Java序列化是Java平台中的一种核心机制,它允许对象的状态被转换成字节流,以便存储到磁盘、数据库,或者在网络中进行传输。这对于实现持久化、远程方法调用(RMI)以及Enterprise JavaBeans(EJB)等高级功能至关...
Java序列化是Java平台提供的一种将对象转换为字节流,以便存储到磁盘、数据库或网络中的机制。它是Java语言内置的一种特性,主要用于持久化数据,也可以在进程间传递对象,或者在网络上传输对象。在Java中,如果一个...
这段代码会从`temp.out`文件中读取序列化的字节流,并恢复为`TestSerial`对象,然后打印出对象的`version`属性。 序列化的过程涉及到一系列复杂的内部机制,包括对象头、字段数据和引用的处理。序列化的字节流通常...
java读取txt文件,可以以文件路径构造这个流,:FileInputStream fin = new FileInputStream("d:/test.txt"); 然后使用这个流直接读取到文件,再使用reader构造BufferedReader,按行读取一整行的文本,作为字符串返回...
Java读取大文件的处理 Java读取大文件的处理是Java编程中的一项重要技术,特别是在处理大文件时需要注意性能和响应速度。下面我们将对Java读取大文件的处理技术进行详细的介绍。 标题解释 Java读取大文件的处理是...
Java多线程读大文件 java多线程写文件:多线程往队列中写入数据
标题"java读取excel之xlsl超大文件"所涉及的核心知识点是优化大量数据的读取策略。在Java中,可以使用Apache POI的SXSSF API(Streaming Usermodel API)来实现这种优化。与常规的XSSF API不同,SXSSF允许我们以流的...