首页 > 代码库 > 2015_1_28_IO与常用类
2015_1_28_IO与常用类
/*日志名格式 年_月_日_内容 如2015_1_28_IO与常用类*/
**************************************************************************************************************************************************************
日期:2015年1月 28日
主题:IO 、常用类
相关文件夹:oracle/相关课件/第12章_Java常用类.pptx
oracle/相关课件/第11章_多线程.pptx
使用软件:Eclipse
**************************************************************************************************************************************************************
上午
**************************************************************************************************************************************************************
一、数据流
数据流可用于对数据输入输出是加密用。
l 为了方便地操作Java语言的基本数据类型的数据,可以使用数据流。
l 数据流有两个类:(用于读取和写出基本数据类型的数据)
? DataInputStream 和DataOutputStream
? 分别“套接”在 InputStream和OutputStream 节点流上
l DataInputStream中的方法
boolean readBoolean() bytereadByte()
char readChar() floatreadFloat()
double readDouble() shortreadShort()
long readLong() intreadInt()
String readUTF() voidreadFully(byte[] b)
l DataOutputStream中的方法
? 将上述的方法的read改为相应的write即可。
例:
/**
* Data Output Stream
*/
@Test
public void test() {
DataOutputStream dos = null;
try {
dos = newDataOutputStream(new FileOutputStream(
new File("data.txt")));
dos.writeDouble(12.2);
dos.writeUTF("asdfasklfj");
dos.flush();
}catch(FileNotFoundExceptione) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(IOExceptione) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
dos.close();
}catch(IOExceptione) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Test
public void test1() {
DataInputStreamdis= null;
try {
dis = new DataInputStream(new FileInputStream(new File("data.txt")));
System.out.println(dis.readDouble());
System.out.println(dis.readUTF());
}catch(IOExceptione) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
dis.close();
}catch(IOExceptione) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
二、 对象流
l ObjectInputStream和OjbectOutputSteam
? 用于存储和读取对象的处理流。它的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。
l 序列化(Serialize):用ObjectOutputStream类将一个Java对象写入IO流中
l 反序列化(Deserialize):用ObjectInputStream类从IO流中恢复该Java对象
? ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量
即注意:需要转换为流的对象需要先实例化Serialize接口将该类序列化,否则无法实现。
l 强调:如果某个类的字段不是基本数据类型或 String 类型,而是另一个引用类型,那么这个引用类型必须是可序列化的,否则拥有该类型的 Field的类也不能序列化
三、RandomAccessFile类
例题:通过RandomAccessFile类实现对文件的插入操作
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public classInsertTest {
public static void Insert(File f, long a, String val) {
Filefile= f;
RandomAccessFileraf= null;
StringBuffersb = new StringBuffer();
try {
raf = new RandomAccessFile(file,"rw");
byte[]by = newbyte[1024];
raf.seek(a);
intlen = 0;
while ((len =raf.read(by)) != -1) {
sb.append(newString(by));
}
raf.seek(a);
raf.write(val.getBytes());
raf.write(sb.toString().getBytes());
}catch(IOExceptione) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
raf.close();
}catch(IOExceptione) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[]args) {
Filefile= newFile("hello.txt");
Insert(file, 5,"asdfgg44432---");
}
}
**************************************************************************************************************************************************************
下午
**************************************************************************************************************************************************************
一、String类
l 常量对象:字符串常量对象是用双引号括起的字符序列。
l 例如:"你好"、"12.97"、"boy"等。
l 字符串的字符使用Unicode字符编码,一个字符占两个字节
l String类较常用构造方法:
? String s1 = new String();
? String s2 = new String(String original);
? String s3 = new String(char[] a);
? String s4 = new String(char[] a,int startIndex,int count)
二、字符串与基本数据的相互转化
l 字符串转换为基本数据类型
? Integer包装类的public static int parseInt(Strings):可以将由“数字”字符组成的字符串转换为整型。
? 类似地,使用java.lang包中的Byte、Short、Long、Float、Double类调相应的类方法可以将由“数字”字符组成的字符串,转化为相应的基本数据类型。
l 基本数据类型转换为字符串
? 调用String类的public String valueOf(int n)可将int型转换为字符串
? 相应的valueOf(byte b)、valueOf(long l)、valueOf(float f)、valueOf(double d)、valueOf(boolean b)可由参数的相应类到字符串的转换
三、StringBuffer类
l java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。
l 很多方法与String相同,但StingBuffer是可变长度的。
l StringBuffer是一个容器。
四、StringBuilder类
l StringBuilder和 StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
? String:不可变字符序列
? StringBuffer:可变字符序列、效率低、线程安全
? StringBuilder(JDK1.5):可变字符序列、效率高、线程不安全
l String使用陷阱:
? string s="a"; //创建了一个字符串
s=s+"b"; //实际上原来的"a"字符串对象已经丢弃了,现在又产生了一个字符串s+"b"(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能。
五、日期类
1.java.lang.System类
System类提供的public static longcurrentTimeMillis()用来返回当前时间与1970年1月1 日0时0分0秒之间以毫秒为单位的时间差。
? 此方法适于计算时间差。
l 计算世界时间的主要标准有:
? UTC(Universal Time Coordinated)
? GMT(Greenwich Mean Time)
? CST(Central Standard Time)
六、SimpleDateFormat()
Date类的API不易于国际化,大部分被废弃了,java.text.Simp
leDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
l 它允许进行格式化(日期à文本)、解析(文本à日期)
u 格式化:
? SimpleDateFormat() :默认的模式和语言环境创建对象
? public SimpleDateFormat(Stringpattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:
? public String format(Date date):方法格式化时间对象date
u 解析:
? public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。
2015_1_28_IO与常用类