InputStreamReader:是从字节流到字符流的桥梁,父类是Reader
? 它读取字节,并使用指定的编码将其解码为字符
? 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
OutputStreamWriter:是从字符流到字节流的桥梁,父类是Writer
? 是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节
? 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
import java.io.*;
import java.nio.charset.Charset;
public class InputStreamReaderDemo {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("C:\\Users\\余生\\Desktop\\a.txt"),"gbk");
osw.write("老铁666");
osw.close();
InputStreamReader isr=new InputStreamReader(new FileInputStream("C:\\Users\\余生\\Desktop\\a.txt"),"gbk");
int len;
char[] chars = new char[1024];
while ((len=isr.read(chars))!=-1){
System.out.println(chars);
}
isr.close();
FileReader fr=new FileReader("C:\\Users\\余生\\Desktop\\a.txt", Charset.forName("gbk"));
// FileOutputStream fos=new FileOutputStream(new File("C:\\Users\\余生\\Desktop\\a.txt"),Charset.forName("gbk"));
int len1;
char[] chars1 = new char[1024];
while ((len1=fr.read(chars1))!=-1){
System.out.println(chars1);
}
fr.close();
}
}
1.为什么要使用对象流?
在开发中,经常需要将对象的信息保存到磁盘中,如果使用前面所学的知识来实现,会非常的繁琐。使用对象流就非常的方便
2.对象流的基本特点?
对象操作流可以将对象以字节的形式写到本地文件中,直接打开是看不懂的,需要时可以再次用对象操作流读到内存中
1.什么是序列化?
序列化就是将对象转换为字节流,以便存储到特点存储介质(例如磁盘)的过程
2.什么是反序列化?
反序列化就是将字节流,转换为对象的过程
3.对象操作输出流
(对象序列化流):
ObjectOutputStream:就是将对象保存到磁盘中,或者在网络中传输
对象对象操作输入流
(对象反序列化流)
ObjectInputStream:把写到本地文件中的对象读到内存中,或者接收网络中传输的对象
import java.io.*;
public class Demo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//序列化
User user=new User("张三","123");
ObjectOutputStream sso=new ObjectOutputStream(new FileOutputStream("C:\\Users\\余生\\Desktop\\a.txt"));
sso.writeObject(user);
sso.close();
//反序列化
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("C:\\Users\\余生\\Desktop\\a.txt"));
User o = (User) ois.readObject();
System.out.println(o.getUsername());
System.out.println(o.getPassword());
ois.close();
}
}
如果一个对象中的某个成员变量的值不想被序列化,又该如何实现呢?
是一个Map体系的集合类
Properties可以保存到流中(store方法)从流中加载(load方法)
一般只存字符串
? 特有方法
方法名 | 说明 |
---|---|
Object setProperty(String key, String value) | 设置集合的键和值,都是String类型,底层调用 Hashtable方法 put |
String getProperty(String key) | 使用此属性列表中指定的键搜索属性 |
Set |
从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串 |
import java.util.Properties;
import java.util.Set;
public class PropertiesDemo2 {
public static void main(String[] args) {
Properties prop = new Properties();
prop.setProperty("江苏","南京");
prop.setProperty("安徽","南京");
prop.setProperty("山东","济南");
Set<Object> keySet = prop.keySet();
for (Object o : keySet) {
Object o1 = prop.get(o);
System.out.println(o+" "+o1);
}
System.out.println("=====");
Set<String> keys = prop.stringPropertyNames();
for (String key : keys) {
String value = prop.getProperty(key);
System.out.println(key+" "+value);
}
}
}
方法名 | 说明 |
---|---|
void load(Reader reader) | 将字符输入流中的数据加载到Properties对象中 |
public class LoadDemo {
public static void main(String[] args) throws IOException {
Properties prop = new Properties();
FileReader fr = new FileReader("prop.properties");
prop.load(fr);
fr.close();
System.out.println(prop);
}
}
方法名 | 说明 |
---|---|
void store(Writer writer, String comments) | 将Properties集合中的数据存入字符输出流 |
public class StoreDemo {
public static void main(String[] args) throws IOException {
Properties prop=new Properties();
prop.put("zhangsan","123");
prop.put("lisi","456");
prop.put("wangwu","789");
FileWriter fw = new FileWriter("prop.properties");
prop.store(fw,null);
fw.close();
}
}
原文:https://www.cnblogs.com/zhangmeng0726/p/14623323.html