其他流总述

1.转换流

InputStreamReader: 把InputStream转换为Reader,可以指定编码表
OutputStreamWriter: 把OutputStream转换为Writer,可以指定编码表

//转换流[用于指定编码表读入或写出]
public class Demo1 {public static void main(String[] args) throws IOException {//jdk11以前使用转化流[按照指定的编码表,将字节流转化为字符流]method1();//jdk11之后提供了字符流指定编码表//Charset.forName()封装指定编码表//method2();}private static void method1() throws IOException {//1.创建转化输入输出流对象InputStreamReader isr = new InputStreamReader(new FileInputStream("day12_myIoOtherStream\\a.txt"), "gbk");OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("day12_myIoOtherStream\\c.txt"), "utf-8");char []chars =new char[1024];int len = isr.read(chars);//2.边读边写while (len!=-1){osw.write(chars,0,len);len = isr.read(chars);}//3.释放资源isr.close();osw.close();}private static void method2() throws IOException {//1.创建字符输入输出流对象FileReader fr = new FileReader("day12_myIoOtherStream\\a.txt", Charset.forName("GBK"));FileWriter fw = new FileWriter("day12_myIoOtherStream\\b.txt", Charset.forName("utf-8"));char []chars =new char[1024];int len = fr.read(chars);//2.边读边写while (len!=-1){fw.write(chars,0,len);len = fr.read(chars);}//3.释放资源fr.close();fw.close();}
}
打印结果:
------------------------------------------------------------------------------------------------
a.txt:我爱中国
b.txt:我爱中国
c.txt:�Ұ��й�
2.对象流【隐藏对象不能被直接读取】

ObjectInputStream: 读取对象的
ObjectOutputStream: 写入对象

//对象操作流(序列化流)----------做了解
//objectOutputStream 序列化流 ;写对象
//objectInputStream 反序列化流 ;读对象
public class Demo1 {public static void main(String[] args) throws IOException, ClassNotFoundException {User user = new User("zhangsan", "123456");//把对象写到文件中去【序列化】
//        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("day12_myIoOtherStream\\d.txt"));
//        oos.writeObject(user);
//        oos.close();//从文件中读取对象【反序列化】ObjectInputStream ois = new ObjectInputStream(new FileInputStream("day12_myIoOtherStream\\d.txt"));Object o = ois.readObject();System.out.println(o);}
}//用户类
//Serializable 标记接口,表示可被序列化
public class User implements Serializable {private String name;private String password;//防止序列化前后属性变更,可固定序列号解决报错//代码可在String源码中复制private static final long serialVersionUID = 67710L;public User(String name, String password) {this.name = name;this.password = password;}//标准的Javabean类(get、set方法)@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", password='" + password + '\'' +'}';}
}打印结果:
----------------------------------------------------------------------------
d.txt:�� sr com.itheima.objectStream.User     ~ L namet Ljava/lang/String;L passwordq ~ xpt zhangsant 123456
控制台:User{name='zhangsan', password='123456'}
3.标准的输入输出流【面试】

System.in: 标准的输入流,读取键盘录入的数据
System.out: 标准的输出流,往控制台输出数据

//标准输入输出流【扩展内容,打印和键盘录入底层原理】
public class Demo1 {public static void main(String[] args) throws IOException {//System.in:标准的输入流,读取键盘录入的数据[InputStream]//Scanner是对其的包装,增加了对数据的操作//method1();//System.out:标准的输出流,往控制台输出数据//print底层用的输出流就是PrintStream 父类为[FilterOutputStream]method2();}private static void method2() throws IOException {PrintStream out = System.out;//把字节流转化为字节流[转化流]OutputStreamWriter osw = new OutputStreamWriter(out);//把字符流包装成缓冲流BufferedWriter bw = new BufferedWriter(osw);//向控制台输出数据bw.write("asd");//释放资源bw.close();}private static void method1() throws IOException {Scanner sc = new Scanner(System.in);//自定义[键盘录入]InputStream in = System.in;//把字节流转化为字节流[转化流]InputStreamReader isr = new InputStreamReader(in);//把字符流包装成缓冲流BufferedReader br = new BufferedReader(isr);//读取键盘录入的数据String s = br.readLine();System.out.println(s);//关闭流br.close();}
}打印结果:
----------------------------------------------------------------------------
method1:1212
method2: asd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何查阅相关工作所用到的文献资料

以百度学术为例。 step1:百度学术里输入 最关键的paper 名称,并点击 被引量链接; step2:通过最近年份 或 其他条件 筛选paper (注意看发表期刊或会议的级别) step3:主要看paper的摘要或 intro&…

递归算法介绍及Java应用实战

转载自 递归算法介绍及Java应用实战 什么是递归算法 递归算法是把问题转化为规模缩小了的同类问题的子问题,然后递归调用函数(或过程)来表示问题的解。一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数…

K最近邻分类器

转自: http://www.cnblogs.com/qwertWZ/p/4582096.html 本章介绍了《机器学习实战》这本书中的第一个机器学习算法:k-近邻算法,它非常有效而且易于掌握。首先,我们将探讨k-近邻算法的基本理论,以及如何使用距离测量的方…

多线程安全问题1

1.问题的产生 原因:多个线程操作同一个共享数据。 原理:多个线程在访问共享数据时,由于CPU的随机性,一个线程还没有执行完,执行权被其他线程抢走了,这个时候就有可能出现线程安全问题。 解决方式&#xff…

Java父类强制转换子类原则

转载自 Java父类强制转换子类原则最近,微信群友在讨论子类父类的转换问题,其实不难,给大家用实例来说明一下就很明了了。 我们知道Java中子类转换成父类是没有任何问题的,那父类可以转换成子类吗? 来看下面这段程序&am…

生产者和消费者案例

1.案例描述 这里以吃饭为例,假设有一个桌子,用来存汉堡包,然后有厨师和消费者,厨师往桌子上放汉堡包,消费者从桌子上取走汉堡包。当两者在一个时间段同时进行多次自己的操作时,很明显这就是多线程编程的生…

用Python开始机器学习(4:KNN分类算法)

转自: http://blog.csdn.net/lsldd/article/details/41357931 1、KNN分类算法 KNN分类算法(K-Nearest-Neighbors Classification),又叫K近邻算法,是一个概念极其简单,而分类效果又很优秀的分类算法。 他的…

Mybatis传递多个参数的4种方式

转载自 Mybatis传递多个参数的4种方式(干货)现在大多项目都是使用Mybatis了,但也有些公司使用Hibernate。使用Mybatis最大的特性就是sql需要自己写,而写sql就需要传递多个参数。面对各种复杂的业务场景,传递参数也是一…

多线程安全问题2

1.volatile关键字 <1>作用&#xff1a;强制线程每次在使用的时候,都会看一下共享区域最新的值[用于提供线程安全] <2>与synchronized的区别和联系&#xff1a; 把代码块声明为 synchronized&#xff0c;有两个重要后果&#xff0c;通常是指该代码具有 原子性&…

Maven Optional Exclusions使用区别

转载自 Maven Optional & Exclusions使用区别 Optional和Exclusions都是用来排除jar包依赖使用的&#xff0c;两者在使用上却是相反。 Optional定义后&#xff0c;该依赖只能在本项目中传递&#xff0c;不会传递到引用该项目的父项目中&#xff0c;父项目需要主动引用该依赖…

为什么jdk的CLASSPATH环境变量需要设置rt.jar 和 tools.jar

How Classes are Found 中有说明&#xff1a;&#xff08;java启动类文件在 rt.jar中&#xff0c; 而 工具类文件在 tools.jar 中&#xff09; How the Java Launcher Finds Classes The Java launcher, java, initiates the Java virtual machine. The virtual machine searc…

线程池的实现

1.创建线程池 API提供了一个工具类叫Executors&#xff0c;可以用它的方法生成不同特点的线程池&#xff0c;返回一个ExecutorService对象。 <1>Executors.newCachedThreadPool() 【池子中默认是空的&#xff0c;最多可以容纳int类型的最大值】 <3>Executors.new…

JSON Web Token (JWT),服务端信息传输安全解决方案

转载自 JSON Web Token (JWT)&#xff0c;服务端信息传输安全解决方案JWT介绍 JSON Web Token(JWT)是一种开放标准(RFC 7519)&#xff0c;它定义了一种紧凑独立的基于JSON对象在各方之间安全地传输信息的方式。这些信息可以被验证和信任&#xff0c;因为它是数字签名的。JWTs可…

thinking-in-java(18) java io

【0】README&#xff1a;本篇文章是以 thinking in java 为基础梳理的&#xff1b; 【18.1.1 目录列表器】 // 传入正则表达式以过滤文件名如 (.*src)* public class DirList {public static void main(String[] args) {File path new File(".");String[] list; i…

并发工具类【线程安全相关的类】

1.Hashtable和ConcurrentHashMap Hashtable&#xff1a;哈希表结构&#xff08;数组链表&#xff09;&#xff0c;线程安全的(同步代码块&#xff0c;效率低) ConcurrentHashMap&#xff1a; jdk7:采用Segment数组[不会扩容] HashEntry[二次哈希计算存入的位置,可扩容]&#…

JSON Web Token (JWT)生成Token及解密实战

转载自 JSON Web Token (JWT)生成Token及解密实战昨天讲解了JWT的介绍、应用场景、优点及注意事项等&#xff0c;今天来个JWT具体的使用实践吧。从JWT官网支持的类库来看&#xff0c;jjwt是Java支持的算法中最全的&#xff0c;推荐使用&#xff0c;网址如下。https://github.co…

java中两个map的融合(两个map有相同字段)

试想这样一个场景&#xff1a; 数据库表中 有 城市信息表 city_tbl&#xff1b; 有院士信息表 ys_tbl &#xff0c;其中院士有城市id字段&#xff08;id&#xff09;&#xff1b; 但是不是所有城市都有院士&#xff1b; 我们想要得到 城市的详细信息&#xff0c;包括院士个数…

网络编程实现

1.网络编程三要素 1.IP地址&#xff1a;网络中设备的唯一标识IPv4: 由4个字节组成&#xff0c;点分十进制表示法IPv6: 由16个字节组成&#xff0c;冒分十六进制表示法"127.0.0.1"本地主机网络地址【用于测试】相关命令&#xff1a;ipconfig: 查看本机在当前网络环境…

通用唯一标识码UUID的介绍及使用

转载自 通用唯一标识码UUID的介绍及使用。什么是UUID&#xff1f; UUID全称&#xff1a;Universally Unique Identifier&#xff0c;即通用唯一识别码。 UUID是由一组32位数的16进制数字所构成&#xff0c;是故UUID理论上的总数为16^32 2^128&#xff0c;约等于3.4 x 10^38。也…

IEEE论文检测的字体未嵌入问题Times New Roman,Bold, Times New Roman,Italic is not embedded解决方法

【1】README 毕业前写了一篇 英文paper&#xff0c; 接受后&#xff0c;需要提交到 IEEE PDF Express 做格式检测&#xff1b;&#xff1b;latex源码中引用了 Visio生成的算法流程图&#xff0c;PDF文件&#xff1b; 谁料&#xff0c;哥子提交上去后&#xff0c;报如下错误&…