- 浏览: 1572865 次
- 来自: 上海
文章分类
- 全部博客 (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 944public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2228经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5595package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 913import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1019/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 954//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1783更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1371import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 779import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2365import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 879// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1130import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 765import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1110import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3845import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 926/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 977import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1799Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 965/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2175package out; import ja ...
相关推荐
java读取本地图片文件获取流!java读取本地图片文件获取流!
多线程随机读取文件RandomAccessFile
java读取文件方法大全 读取file流等技术
Java保存与读取文件代码示例,super("存储与读取对象"); //调用父类构造函数 Container container=getContentPane(); //得到容器 Icon imageIcon=new ImageIcon("image.gif"); //实例化一个图标 ...
读取随机文件读取随机文件读取随机文件读取随机文件读取随机文件
java 按顺序读取文件 java 按顺序读取文件 java 按顺序读取文件
java随机读取文件内容,打开一个随机访问文件流,按只读方式,将读文件的开始位置移到beginIndex位置。一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取...
主要介绍了Java基于IO流读取文件的方法,涉及Java文件流操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
Java 读取文件操作 java中多种方式读文件 一、多种方式读文件内容。 1、按字节读取文件内容 2、按字符读取文件内容 3、按行读取文件内容 4、随机读取文件内容
java如何读取文件 。把固定的文件读取到程序中来。
基于WindowForm应用程序C#语言通过实际案例实现将对象保存到文件及从已保存的文件中读取对象(直接保存与读取、通过序列化与反序列化方式进行对象保存与读取)
delphi读取文件流delphi读取文件流 tfilestream利用字节数组复制文件
java读取TXT文件入库,java读取TXT文件入库,java读取TXT文件入库,
java读取文件内容java读取文件内容java读取文件内容
java随机读取一行文本,避免了网上其他版本乱码的烦恼~!
java读取mpp文件,来生成mpp文件的jar包。
java读取txt文件,可以以文件路径构造这个流,:FileInputStream fin = new FileInputStream("d:/test.txt"); 然后使用这个流直接读取到文件,再使用reader构造BufferedReader,按行读取一整行的文本,作为字符串返回...
JAVA实现远程文件读取
shp文件:地理信息系统,也被称作GIS,它主要的扩展类型是SHAPEFILE (.SHP),一个包含了矢量地理空间数据的流行文件格式,描述了几何形态,点,线和多边形...该方法通过java代码实现将shp文件的数据读取以及存入数据库