java byte[] 文件流 转换成string是乱码_Java学习--IO(二)、多线程

536ef74e603c60f81115f3a6c4cd7982.png

1.标准输入流

标准输入流是指从标准输入设备流向程序的数据。

Java利用http://System.in来得到一个InputStream字节输入流

public static void main(String[] args) throws IOException {// 需求:输入一句话,然原样输出InputStream in = System.in;byte[] buf = new byte[1024];int len;// buf中包含回车和换行len = in.read(buf);String str = new String(buf, 0, len);// System.out.println(Arrays.toString(buf));System.out.println(str);}

注意:从控制台输入的字符,将会以默认编码编码成字节,进而进入输入流。同时,从控制台输入的字节将会包含换行及回车的编码。

从控制台高效读取一首诗,并将这首诗写入文件中

public static void main(String[] args) throws IOException {// 需求:从控制台高效读取一行数据。把一首诗写入文件。InputStream in = System.in;InputStreamReader reader = new InputStreamReader(in, "GBK");BufferedReader br = new BufferedReader(reader);File file = new File("d:javatestk.txt");FileWriter writer = new FileWriter(file);BufferedWriter bw = new BufferedWriter(writer);String end = "bye";while(true) {String line = br.readLine();if(line.equals(end)) {break;}bw.write(line);// bw.newLine();}bw.flush();bw.close();writer.close();}

2.标准输出流(PrintStream)

标准输出流是流向标准输出设备(显示器)的数据。

Java中用System.out得到PrintStream字节输出流(字节打印流)。

含:

print

println方法

public static void main(String[] args) throws IOException {File file = new File("d:javatestk.txt");FileReader reader = new FileReader(file);BufferedReader br = new BufferedReader(reader);PrintStream ps = System.out;String line;while( (line=br.readLine())!=null ) {ps.println(line);}}

注意:PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节

public static void main(String[] args) throws IOException {String str = "hello中国";byte[] buf = str.getBytes("utf-8");PrintStream ps = System.out;ps.write(buf);}

以上将会发生乱码。

3.字符打印流PrintWriter

实现了PrintStream中所有的方法,同样是标准输出流是流向标准输出设备(显示器)的数据。但是是输出格式化的表示形式。

此类方法不会抛出IO异常。

此方法可以按照一定的格式化写入到我们的文档当中。

public static void main(String[] args) throws IOException {File file = new File("g:javatesta.txt");PrintWriter pw = new PrintWriter(file);Date date = new Date(0);pw.format("%tA", date);pw.flush();pw.close();}

这里给出一些常用日期格式化转换符如下:

4559dd0263f975bc3b9b337184eab1ba.png

4.Scanner类

用于扫描文件、控制台、字节流等等。

public static void main(String[] args) throws IOException {// 扫描平台默认编码的文件/*File file = new File("d:javatestj.txt");Scanner sc = new Scanner(file);*/// 扫描指定编码的文件Scanner sc = new Scanner(new FileInputStream(new File("d:javatestj-utf8.txt")), "UTF-8");String line;while (sc.hasNextLine()) {line = sc.nextLine();System.out.println(line);}}

5.序列化

把内存中的对象永久保存到硬盘的过程称为对象序列化,也叫做持久化。

把硬盘持久化的内存恢复的内存的过程称为对象反序列化。

5.1 Serializable

Serializable接口没有方法或字段,仅用于标识可序列化的语义,类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化,并抛出异常。

5.1.1序列化对象

ObjectOutputStream 继承于OutputStream,专门用于把对象序列化到本地。

public static void main(String[] args) throws IOException {Student stu = new Student("001", "大狗", 20, Gender.男);/***	方案1:取stu所有的属性,通过特定的字符串(-),把各个属性值连接起来*  001-大狗-20-男*/File file = new File("d:javatestl.txt");FileOutputStream out = new FileOutputStream(file);ObjectOutputStream oos = new ObjectOutputStream(out);oos.writeObject(stu);oos.close();out.close();}

5.1.2反序列化对象

ObjectInputStream 继承于InputStream ,专门用于把本地持久化内容反序列化到内存。

public static void main(String[] args) throws IOException, ClassNotFoundException {File file = new File("d:javatestl.txt");FileInputStream in = new FileInputStream(file);ObjectInputStream ois = new ObjectInputStream(in);Student student = (Student) ois.readObject();System.out.println(student.getId());System.out.println(student.getName());System.out.println(student.getAge());System.out.println(student.getGender());ois.close();in.close();}

5.2 transient关键字

开发过程中,如果想忽略某些字段不让其序列化时,可以使用transient修饰。

public class Student implements Serializable {private static final long serialVersionUID = 7222966748321328300L;private String id;private transient String name;private transient int age;private Gender gender;private String phone;

6. DataInputStream / DataOutputStream

这两者分别继承于InputStream与OutputStream。特别的是他们很适合读取/写入在网络传输过程中的数据流。

public static void main(String[] args) throws IOException {File file = new File("d:javatestn.txt");FileOutputStream out= new FileOutputStream(file);DataOutputStream dos = new DataOutputStream(out);dos.writeInt(10);dos.writeUTF("hello中国");dos.close();out.close();System.out.println("写入完成");}
public static void main(String[] args) throws IOException {File file = new File("d:javatestn.txt");FileInputStream in = new FileInputStream(file);DataInputStream dis = new DataInputStream(in);int a = dis.readInt();String str = dis.readUTF();System.out.println(a);System.out.println(str);}

e1f08cbd484112a6cde5988e5cfd90b3.png

7.多线程

7.1程序与进程

在计算机刚出现时,计算机的效率是十分低下的,尤其是对CPU的利用率,当一个程序运行时,将会产生一段进程,计算机需把该进程全部完成,才能让下一段程序进入,这样将会对效率产生极大的影响。

对于当今电脑来讲,已经不存在着这样的问题了,因为电脑引入了进程与多线程的概念,使得在宏观上表现出了cpu在同时处理多个程序,但在微观上,即实际上,cpu每次都只能运行一个程序。由于速度较快,人类感受不到这之间的差距。较为明显的感受即是,电脑发生卡顿。此时说明有一个程序正在CPU中运行,且无法被移出或短时间内无法移出。

7.2进程与线程的区别

999fe60e6bbccbcc2b5e1149343260ce.png

7.3实现多线程

第一种:

public class MyThread extends Thread {@Overridepublic void run() {System.out.println("我是多线程MyThread");for (int i = 0; i < 5; i++) {System.out.println("MyThread:" + i);}}
}public class Test01 {public static void main(String[] args) {// main开始运行产生一个进程,该进程默认有个主(main)线程// 创建线程MyThread t1 = new MyThread();// 启动线程t1.start();for (int i = 0; i < 5; i++) {System.out.println("main Thread:" + i);}}

第二种:

public class MyRun implements Runnable {@Overridepublic void run() {System.out.println("我是MyRun");for (int i = 0; i < 5; i++) {System.out.println("my run:" + i);}}
}public class Test02 {public static void main(String[] args) {MyRun run = new MyRun();Thread t1 = new Thread(run);t1.start();// main开始运行产生一个进程,该进程默认有个主(main)线程for (int i = 0; i < 5; i++) {System.out.println("main Thread:" + i);}}
}

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

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

相关文章

HTML字体小于12谷歌不兼容,Chrome谷歌浏览器下不支持css字体小于12px的解决办法...

coder.png在这一年的工作中&#xff0c;我发现很多问题你利用自己的「聪明才智」绕过去了&#xff0c;总有一天它会和你不期而遇&#xff0c;今天我们就来直面一个字体兼容性的小问题&#xff1a;Chrome谷歌浏览器下不支持css字体小于12px。我们先来看个效果图(chrome下)&#…

为什么同大取大同小取小_不锈钢马大型动物雕塑-大同金属雕塑马订制

不锈钢马大型动物雕塑-大同金属雕塑马订制 不锈钢浮雕雕塑所谓不锈钢浮雕雕塑是雕塑与绘画结合的产物&#xff0c;用压缩的办法来处理对象&#xff0c;靠等因素来表现三维空间&#xff0c;并只供一面或两面观看。浮雕一般是在另一平面上的&#xff0c;因此在建筑上使用更多&…

html5之api,HTML5之API(示例代码)

HTML5就是牛&#xff0c;可以直接播放音视频&#xff0c;还可以作图&#xff1b;一、HTML5中播放视频和音频&#xff1a;加载时直接播放音频的方式&#xff1a;new Audio("BY2.mp3").play();播放器视频音频var video $("#mp")[0];video.play();简单播放器…

电子计算机时代 英语,2018年英语专四作文范文:计算机时代

2018年英语专四作文范文&#xff1a;计算机时代1.近年来&#xff0c;计算机的应用越来越广泛2.计算机能做许多有益的事3.计算机也有许多副作用范文&#xff1a;In recent years, computers have grown in popularity. You can find them notonly in the universities but on fa…

cad2010多个文件并排显示_便携式显示器清晰度参数,你知道吗?

便携式显示器清晰度是十分重要的&#xff0c;那么影响便携式显示器清晰度的参数有哪些呢&#xff1f;一起跟随诚易盛小编去看看&#xff0c;感谢大家阅读&#xff01;戳这里直达上文aosiman便携式显示器 15.6英寸1、屏幕尺寸有多少人认为&#xff0c;屏幕越大就越清晰的?其实不…

xp计算机用户密码设置,XP电脑开机密码怎么设置?

电脑开机密码是在我们打开电脑后输入正确的密码后才能启动操作系统。手机上的密码我们都会设置&#xff0c;那么你们知道怎么给电脑设置开机密码呢?接下来&#xff0c;小编就教大家设置电脑开机密码&#xff0c;一起来看一下吧电脑开机密码如何设置呢&#xff1f;由于网络安全…

计算机网络纠错码,纠错码

纠错码(error correcting code)&#xff0c;在传输过程中发生错误后能在收端自行发现或纠正的码。仅用来发现错误的码一般常称为检错码。为使一种码具有检错或纠错能力&#xff0c;须对原码字增加多余的码元&#xff0c;以扩大码字之间的差别 &#xff0c;即把原码字按某种规则…

fopen_s不接受两个参数_如何利用SPC来管理制造过程,不懂SPC还敢混“质”场?

请点击上面  免费关注本账号&#xff01;必读 → 2019年4-5月开课计划(IASC-CN俱乐部)PC是汽车行业品质管理的重要工具之一&#xff0c;AIAG为此写了一整本书。这篇文章略去SPC一些基础知识的介绍&#xff0c;直接来讲一下应如何利用SPC来管理一个制造过程。I. SPC的应用范围…

台式计算机装系统,教你台式电脑重装系统方法

台式电脑重装系统对于大部分用户都会因为台式电脑重装系统一般都不需要修改设置&#xff0c;所以重装系统就不那么麻烦了&#xff0c;通常情况下大家都会使用下面教你们的第一种台式电脑重装系统方法&#xff0c;因为这种方法是傻瓜式的重装教程&#xff0c;所以小编在下文中就…

江苏师范大学计算机全国排名,国内131所二本师范大学最新排名(按录取分数线)...

每年高考录取结束后&#xff0c;“文科生可以考哪些师范大学&#xff0c;这些学校的排名怎么样”都是大家关注的热门问题&#xff0c;小编根据安徽省考试院与圆梦志愿的数据&#xff0c;整理出所有二本师范大学2020年在安徽省文科的分数线排名&#xff0c;希望能够给大家带来参…

3w最简单led灯电路图_Mixly 第19课 光感应灯——光敏电阻使用

第19课 光感应灯——光敏电阻使用光敏电阻器又叫光感电阻&#xff0c;是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器&#xff1b;入射光强&#xff0c;电阻减小&#xff0c;入射光弱&#xff0c;电阻增大。光敏电阻器一般用于光的测量、光的控制和光电…

arcgis xml 下载 切片_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...

内容概览1.openlayers6结合geoserver利用WFS服务实现图层编辑功能2.源代码demo下载效果图如下&#xff1a;本篇主要是参照openlayers6结合geoserver利用WFS服务实现图层新增功能(附源码下载)基础上实现的&#xff0c;openlayers6通过调用geoserver发布的地图服务WFS来达到图层编…

存储性能测试软件怎么用的,《杉岩两语》:Vdbench在分布式存储性能测试中的使用方法...

Vdbench是Oracle编写的一款应用广泛的存储性能测试工具&#xff0c;既支持块设备的性能测试&#xff0c;也支持文件系统性能测试。Vdbench使用java编写&#xff0c;兼容linux和windows的操作系统&#xff0c;使用方便。1、Vdbench使用及结果参看使用vdbench时需要先安装java的j…

计算机键盘练习,电脑键盘指法练习

电脑键盘指法练习就像使用筷子&#xff0c;只有掌握了正确的指法&#xff0c;夹东西才稳。对于电脑键盘也一样&#xff0c;只有掌握了正确的指法&#xff0c;打字速度才会快。以下百分网小编整理的电脑键盘指法练习介绍&#xff0c;希望对大家有所帮助&#xff0c;更多信息请关…

c语言 数组、字符串的形参格式_华中师范大学计算机考研874C语言笔记(一)

运算符优先级自右向左记忆口诀条件赋值自增减&#xff08;?: //- -- &#xff09;指针取址按位反 (* & ~)内存非负强制转 (sizeof ! - (type))define 前面的#标志着define是一个【预处理命令】而不是C语句。高字节在【高地址】存储单元&#xff0c;低字节在【低地址】存储…

前端分页_前端分页

1、适合情形前端分页一般用于数据量较小的情况&#xff0c;一次请求把数据全部从后端请求回来。2、前端分页例子前端分页代码示例​github.comcd front-end-page 进入front-end-page 文件夹下npm install 安装依赖npm run dev …

服务器分发系统如何做性能测试,怎么做软件性能测试,完整的性能测试流程有哪些内容?...

原标题&#xff1a;怎么做软件性能测试&#xff0c;完整的性能测试流程有哪些内容&#xff1f;一、做性能测试前的准备工作1.要清楚服务器的ip地址和账号密码(目的是用于监控)2.服务器的系统是什么3.是否需要多级联合4.服务器一共有几台5.了解服务器的配置情况6.本机的配置(16g…

cocos怎么把res文件夹放服务器上,cocos2d 三合一跑胡子房卡+服务器组件+后台控制+安装教程+棋牌完整源码...

cocos2d 三合一跑胡子房卡服务器组件后台控制棋牌完整源码安装方法&#xff1a;1将工程下的res和src目录复制到version/fromSource 目录中2使用cocos2dx命令 把src目录下的js文件转换成jsc文件在fromSource目录下执行cocos jscompile -s . -d .3删除掉src目录下的js 文件 只保留…

优秀自我简介200字_急需稿件,稿费200元起/篇 | 公众号【深夜秘杏酱】长期征稿(可签约)...

“深夜秘杏酱”征稿函新号大量收稿 欢迎写手大大们踊跃投稿哦Hi&#xff01;我们是一个专注女生性知识科普及女生情感生活的新号——深夜秘杏酱&#xff01;我们希望能在这个新成立的公众号上跟各位小姐姐分享各种搞怪有趣但又干货满满的性知识,一起偷摸“开车”&#xff0c;顺…

kafka中topic默认属性_分享:Kafka 的 Lag 计算误区及正确实现

前言消息堆积是消息中间件的一大特色&#xff0c;消息中间件的流量削峰、冗余存储等功能正是得益于消息中间件的消息堆积能力。然而消息堆积其实是一把亦正亦邪的双刃剑&#xff0c;如果应用场合不恰当反而会对上下游的业务造成不必要的麻烦&#xff0c;比如消息堆积势必会影响…