信号转化java_Java基础知识回顾-7

1、ByteArrayInputStream、ByteArrayOutputStream

String str ="ZHANGSAN";

//System.out.println(str.toLowerCase());

ByteArrayInputStream inputStream = newByteArrayInputStream(str.getBytes());

ByteArrayOutputStream outputStream = newByteArrayOutputStream();

intb;

while((b = inputStream.read()) != -1){

charlowerCase = Character.toLowerCase((char)b);

outputStream.write(lowerCase);

}

byte[] lowerCases = outputStream.toByteArray();

System.out.println(newString(lowerCases,0, lowerCases.length));

全部在内存中完成byte的转换

2、PrintStream:向目标打印

属于OutputStream的实现类,向目标(可能是文件、标准输出屏幕、输出流、网络等)打印各种样式,不过比一般的输出提供了更多的打印方式,可以打印各种数据类型和样式等

OutputStream outputStream = System.out;

outputStream.write("helloABC张三".getBytes());

outputStream.close();

列出当前操作系统的系统参数,输出到文件中

PrintStream printStream =newPrintStream("hello.txt");

System.getProperties().list(printStream);

printStream.close();

3、InputStreamReader、OutputStreamWriter, 计算机存储都是字节流的形式,而读取到内存中需要识别一个个的字符(人只能识别字符),有可能1个字节就代表一个字符(例如英文),也有可能多个字节才能转换成一个字符(例如中文),如果中间存在丢失或无法转换,则看到的就是一堆?

InputStreamReader:将输入的内容字节变成字符

OutputStreamWriter:将输出的内容从字符变成字节

4、合并流:SequenceInputStream

File file1 =newFile("hello.txt");

File file2 = newFile("test.txt");

InputStream inputStream1 = newFileInputStream(file1);

InputStream inputStream2 = newFileInputStream(file2);

SequenceInputStream sequenceInputStream = newSequenceInputStream(inputStream1,

inputStream2);

BufferedInputStream bufferedInputStream = newBufferedInputStream(sequenceInputStream);

intc;

while((c = bufferedInputStream.read()) != -1){

System.out.print((char)c);

}

bufferedInputStream.close();

sequenceInputStream.close();

inputStream1.close();

inputStream2.close();

测试结果:helloworld

在实验中,从bufferedInputStream去取到两个文件大小相加的byte数组中,代码如下,转换出来有问题,有点奇怪,只读到了前一个流中的内容,后面一个流中的内容没读取进来。思考中...

File file1 =newFile("hello.txt");

File file2 = newFile("test.txt");

InputStream inputStream1 = newFileInputStream(file1);

InputStream inputStream2 = newFileInputStream(file2);

SequenceInputStream sequenceInputStream = newSequenceInputStream(inputStream1,

inputStream2);

BufferedInputStream bufferedInputStream = newBufferedInputStream(sequenceInputStream);

intlength = (int) (file1.length() + file2.length());

byte[] b =newbyte[length];

bufferedInputStream.read(b, 0, length);

System.out.println(newString(b,0,length));

bufferedInputStream.close();

sequenceInputStream.close();

inputStream1.close();

inputStream2.close();

测试结果如下:hello

5、Zip压缩与解压

压缩程序:

ZipOutputStream zipOutputStream =newZipOutputStream(newFileOutputStream("hello.zip"));

zipOutputStream.setLevel(9);

ZipEntry zipEntry = newZipEntry("a.txt");

zipOutputStream.putNextEntry(zipEntry);

BufferedInputStream bufferedInputStream = newBufferedInputStream(newFileInputStream("test.txt"));

intcontent;

while((content = bufferedInputStream.read()) != -1){

zipOutputStream.write(content);

}

bufferedInputStream.close();

zipOutputStream.closeEntry();

zipOutputStream.flush();

zipOutputStream.close();

解压程序:

ZipInputStream zipInputStream =newZipInputStream(newFileInputStream("hello.zip"));

ZipEntry zipEntry = null;

while((zipEntry = zipInputStream.getNextEntry()) !=null) {

BufferedOutputStream bufferedOutputStream = newBufferedOutputStream(

newFileOutputStream(zipEntry.getName()));

intcontent =0;

while((content = zipInputStream.read()) != -1){

bufferedOutputStream.write(content);

}

bufferedOutputStream.flush();

bufferedOutputStream.close();

}

zipInputStream.close();

6、zip压缩某目录下的所有文件及子文件

publicvoidzipDirectory(File pathname, ZipOutputStream zipOutputStream)throwsException {

if(!pathname.isDirectory()) {

return;

}

File[] files = pathname.listFiles();

for(File file : files) {

if(file.isDirectory()) {

zipDirectory(file, zipOutputStream);

} else{

ZipEntry zipEntry = newZipEntry(pathname.getName() + File.separator

+ file.getName());

zipOutputStream.putNextEntry(zipEntry);

BufferedInputStream bufferedInputStream = newBufferedInputStream(

newFileInputStream(file));

inti;

while((i = bufferedInputStream.read()) != -1) {

zipOutputStream.write(i);

}

bufferedInputStream.close();

zipOutputStream.flush();

zipOutputStream.closeEntry();

}

}

}

问题:中文编码存在问题,建议选用import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipOutputStream,由于其存在方法out.setEncoding("gbk");//指定编码为gbk

6、ThreadLocal

finalThreadLocal threadLocal =newThreadLocal();

threadLocal.set("main--");

Thread thread = newThread() {

@Override

publicvoidrun() {

threadLocal.set("thread--");

Thread.yield();

System.out.println(Thread.currentThread().getName() + ":"+ threadLocal.get());

}

};

thread.start();

Thread.yield();

System.out.println(Thread.currentThread().getName() + ":"+ threadLocal.get());

7、数组和List之间的转换

数组->List: Arrays.asList(a)

List->数组:list.toArray()

8、正则表达式

(1)^:在[]内表示取反,在外面表示开头

(2)group

String regex ="[a-z]{3,5}";

Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

Matcher matcher = pattern.matcher("Abc_defgh_aa_ABCD1");

while(matcher.find()) {

System.out.print("位置[左闭右开区间):"+matcher.start() +"_"+ matcher.end() +", 匹配内容:");

System.out.println(matcher.group());

}

测试结果:

位置[左闭右开区间):0_3, 匹配内容:Abc

位置[左闭右开区间):4_9, 匹配内容:defgh

位置[左闭右开区间):13_17, 匹配内容:ABCD

(3)邮件的正则表达式

[\\w[_.]]+@[\\w[_.]]+\\.[\\w]+

(4)"."点号在正则表达式中表示任何字符, 需要表示点号的时候必须转义\\.

(5)group的分组

分组是以正则表达式中的小括号'()'为标准的,当匹配成功后,group或group(0)表示匹配的整个字符串,group(1)代表正则中第一个小括号匹配到的内容,group(2)代表第二个小括号代表的内容,依次类推

(6)匹配require引入文件

"^[\\s]*#require[\\s]*\\(\"([\\w./]+)\"\\)[\\s]*$"含义为:以任意空白字符开头,在#require,再任意空白字符,再(",再任意字母、点号、斜线, 再"),最后任意个空白字符结尾

测试代码:

publicstaticvoidmain(String[] args) {

FileInputStream fileInputStream = null;

try{

fileInputStream = newFileInputStream(newFile(

"C:/Documents and Settings/***/My Documents/tmp/hello.js"));

} catch(FileNotFoundException e) {

e.printStackTrace();

}

InputStreamReader inputStreamReader = newInputStreamReader(fileInputStream,

Charset.defaultCharset());

BufferedReader bufferedReader = newBufferedReader(inputStreamReader);

String line = "";

try{

while((line = bufferedReader.readLine()) !=null) {

String requireFile = getRequireFile(line);

System.out.println(requireFile);

}

} catch(IOException e) {

e.printStackTrace();

} finally{

try{

bufferedReader.close();

inputStreamReader.close();

fileInputStream.close();

} catch(IOException e) {

e.printStackTrace();

}

}

}

privatestaticString getRequireFile(String line) {

String requireFile = "";

Pattern pattern = Pattern

.compile("^[\\s]*#require[\\s]*\\(\"([\\w./]+)\"\\)[\\s]*$", Pattern.MULTILINE);

Matcher matcher = pattern.matcher(line);

while(matcher.find()) {

requireFile = matcher.group(1);

}

returnrequireFile;

}

测试文件内容:

var param;

#require("hello/world_util/alibaba123_utils.js")

#require("/abc/world_util/alibaba12666_utils.js")

测试结果

hello/world_util/alibaba123_utils.js

/abc/world_util/alibaba12666_utils.js

9、FileReader有待完备的地方,只能使用系统默认的字符集,而没有提供传递字符集的构造函数

FileReader继承了InputStreamReader,但并没有实现父类中带字符集参数的构造函数,所以

FileReader只能按系统默认的字符集来解码

10、阻塞队列:BlockingQueue

生产者中的 put() 操作会在没有空间可用时阻塞,而消费者的 take() 操作会在队列中没有任何东西时阻塞。

11、信号量:Semaphore, 允许规定数量的线程进入操作,释放之后其他进入执行

Runnable limitedCall =newRunnable() {

finalRandom    rand      =newRandom();

finalSemaphore available =newSemaphore(3);

intcount     =0;

publicvoidrun() {

inttime = rand.nextInt(15);

intnum = count++;

try{

available.acquire();

System.out.println("Executing "+"long-running action for "+ time

+ " seconds... #"+ num);

Thread.sleep(time * 1000);

System.out.println("Done with #"+ num +"!");

available.release();

} catch(InterruptedException intEx) {

intEx.printStackTrace();

}

}

};

for(inti =0; i <10; i++)

newThread(limitedCall).start();

12、死锁

publicclassDemo06 {

publicstaticvoidmain(String[] args) {

DeadLock deadLock1 = newDeadLock();

DeadLock deadLock2 = newDeadLock();

deadLock1.setFlag(true);

deadLock2.setFlag(false);

newThread(deadLock1).start();

newThread(deadLock2).start();

}

}

classDeadLockimplementsRunnable {

privatebooleanflag =false;

publicbooleanisFlag() {

returnflag;

}

publicvoidsetFlag(booleanflag) {

this.flag = flag;

}

privatestaticObject object1 =newObject();

privatestaticObject object2 =newObject();

publicvoidrun() {

if(flag) {

synchronized(object1) {

System.out.println(Thread.currentThread().getName() + " get object1.");

try{

Thread.sleep(1000);

} catch(InterruptedException e) {

e.printStackTrace();

}

synchronized(object2) {

System.out.println(Thread.currentThread().getName() + " get object2.");

}

}

} else{

synchronized(object2) {

System.out.println(Thread.currentThread().getName() + " get object2.");

try{

Thread.sleep(1000);

} catch(InterruptedException e) {

e.printStackTrace();

}

synchronized(object1) {

System.out.println(Thread.currentThread().getName() + " get object1.");

}

}

}

}

}

13、反射:通过classloader加载类,标准做法如下:

ClassLoader cl = Thread.currentThread().getContextClassLoader();

if (cl == null) cl = MyClass.class.getClassLoader(); // fallback

Class clazz = cl.loadClass(name);

14、文件大小限制

错误做法:

publicintgetFileSize(File f) {

longl = f.length();

return(int) l;

}

正确做法如下:

不支持传递超过2GB的文件. 最好的做法是对长度进行检查, 溢出时抛出异常

publicintgetFileSize(File f) {

longl = f.length();

if(l > Integer.MAX_VALUE)thrownewIllegalStateException("int overflow");

return(int) l;

}

15、线程sleep中断

try{

Thread.sleep(1000);

} catch(InterruptedException e) {

Thread.currentThread().interrupt();

}

or

while(true) {

if(Thread.currentThread().isInterrupted())break;

}

16、开发中常用术语解释

java的几种对象(PO,VO,DAO,BO,POJO)解释

一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。

二、VO:value object值对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递。

三、DAO:data access object 数据访问对象,此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。

四、BO:business object 业务对象,封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作。

五、POJO:plain ordinary java object 简单无规则java对象,我个人觉得它和其他不是一个层面上的东西,VO和PO应该都属于它。

17、多线售票系统:

classTicketSellerimplementsRunnable {

privateintticketCount =10;

@Override

publicvoidrun() {

while(ticketCount >0) {

synchronized(this) {

if(ticketCount >0) {

try{

Thread.sleep(100);

} catch(InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName()

+ " sell ticket: "+ ticketCount--);

}

}

}

}

}

publicclassDemo01 {

publicstaticvoidmain(String[] args) {

TicketSeller ticketSeller = newTicketSeller();

newThread(ticketSeller,"Thread A").start();

newThread(ticketSeller,"Thread B").start();

newThread(ticketSeller,"Thread C").start();

newThread(ticketSeller,"Thread D").start();

}

}

测试结果:

Thread A sell ticket: 10

Thread A sell ticket: 9

Thread D sell ticket: 8

Thread D sell ticket: 7

Thread D sell ticket: 6

Thread C sell ticket: 5

Thread C sell ticket: 4

Thread C sell ticket: 3

Thread B sell ticket: 2

Thread B sell ticket: 1

18、中断处理

classTicketSellerimplementsRunnable {

@Override

publicvoidrun() {

try{

System.out.println("线程启动");

Thread.sleep(10000);

} catch(InterruptedException e) {

System.out.println("线程被中断");

// e.printStackTrace();

}

}

}

publicclassDemo01 {

publicstaticvoidmain(String[] args)throwsInterruptedException {

TicketSeller ticketSeller = newTicketSeller();

Thread thread = newThread(ticketSeller,"Thread A");

thread.start();

System.out.println("====主线程执行===");

Thread.sleep(1000);

// thread.interrupt();

System.out.println("线程被中断否:"+ thread.isInterrupted());

thread.interrupt();

System.out.println("线程被中断否:"+ thread.isInterrupted());

System.out.println("线程被中断否2:"+ thread.isInterrupted());

System.out.println("主线程是否被中断:"+ Thread.interrupted());

System.out.println("====主线程结束===");

}

}

测试结果:

====主线程执行===

线程启动

线程被中断否:false

线程被中断否:true

线程被中断否2:true

主线程是否被中断:false

线程被中断

====主线程结束===

结论:

interrupt中断该线程,isInterrupted检查该线程是否被中断,interrupted检查当前线程是否被中断。

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

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

相关文章

程序员搞笑故事:给女儿织的辫子 ​​​​,你知道是什么算法吗?

全世界只有3.14 % 的人关注了数据与算法之美1、程序员给女儿织的辫子 &#xff0c;你知道是什么算法吗&#xff1f;推荐阅读《啊哈&#xff01;算法》2、一个姑娘在我女友面前声讨她的男友&#xff0c;女友帮腔说&#xff1a;学土木工程的嘛&#xff0c;肯定又土又木。姑娘问&a…

模块XX.dll已加载,但对DllRegisterServer的调用失败

为什么80%的码农都做不了架构师&#xff1f;>>> 模块"XX.dll"已加载&#xff0c;但对DllRegisterServer的调用失败&#xff0c;错误代码为0x80004005 一句话&#xff0c;权限问题…… 转载于:https://my.oschina.net/szm/blog/76544

近业务=困死在一条船上?

大家好&#xff0c;我是Z哥。先来描述一个常见的场景。程序员与业务需求方常常是一对冤家&#xff0c;经常因为一个业务功能实现争辩得耳红面赤。研发觉得这个功能很low&#xff0c;没什么技术含量&#xff0c;业务方却认为这个功能却很有用&#xff0c;需要花功夫做细做深做好…

爱卡创誓记java刷钱_【178创誓记】快速升级:40到50级只需要两天的黄金刷

本文由178论坛会员&#xff1a;东东呛 转载&#xff0c;如果你是原作者请联系我们&#xff0c;我们会对原创作者给予奖励。(当然您也可以在评论回复表达看法&#xff0c;但是论坛会有更丰富的奖励哦。)朵朵快满级了~~~由于内测只开到50级~~~可还剩下一堆任务~所以刷怪刷到49级半…

大道至简,大数据的小窍门

在大数据时代的现今&#xff0c;数据庞大且繁杂&#xff0c;因此&#xff0c;如何有效利用它们&#xff0c;达到资源不浪费的目的成为了相关工作者思考的问题&#xff0c;于是数据分析就应运而生。在实际生活中&#xff0c;数据分析已经成为人们作出判断和采取行动的基石。比如…

HDU 2996 In case of failure [KD树]

KD树&#xff0c;来源计算几何&#xff0c;在《计算几何-算法与应用》一书中有详细的解释。 这题是比较裸的KD树模型&#xff0c;要在点集中找到离一个点最近的一个点。其实KD树就是一棵多维平衡二叉树&#xff0c;将多维空间分成很多个部分&#xff0c;查找时能够较快的逼近查…

构建属于你自己的dapr服务发现

作者&#xff1a;李俱顺原文&#xff1a;https://www.4async.com/2021/05/building-your-own-dapr-service-discovery/在上一篇文章中&#xff0c;我其实遗留了一个问题&#xff1a;如何定义dapr的服务发现呢&#xff1f;其实在后面阅读dapr的源码之后也前一篇文章的评论中提到…

python csv文件读取行列_使用Numpy读取CSV文件,并进行行列删除的操作方法

Numpy是Python强大的数据计算和处理模块&#xff0c;其操作数据非常迅速且简单易行。首先读取CSV文件>>> import numpy as np#导入numpy模块>>> tempnp.loadtxt("file.csv",dtypenp.int,delimiter,)可以看到两行代码搞定&#xff0c;看一下temp的内…

java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject

错误信息 最近在学Android使用KSOAP2调用现有的Webservice的方法&#xff0c;期间在网上找了很多代码&#xff0c;但是每次在Android模拟器中运行的时候程序都会崩溃&#xff0c;搞得自己都快崩溃了。。。。 查看了一下LogCat中的错误报告&#xff0c;发现是因为java.lang.NoCl…

php 模板替换,使用PHPWord对Word文件做模板替换

因工作需要&#xff0c;使用了版本比较旧的PHPWord项目官方已不见维护更新&#xff0c;上次版本更新是在Fri Jul 8, 2011 at 8:00 AM如果PHP版本>5.3.3&#xff0c;强烈推荐使用PHPOffice/PHPWord这个开源项目本篇针对的为旧版本的PHPWord基本安装问题总结Autoloader自动加载…

服务端和客户端证书各种组合下对访问者(浏览器/中间人)的影响

今天本来想研究下nginx下如果获取SSL指纹&#xff0c;但是环境没有装成功就尝试了下如果不用nginx直接在服务端拿到SSL指纹&#xff0c;没想到从创建自签名证书到如何开启证书&#xff0c;以及服务端证书和客户端证书各种组合校验的测试就花了我很长时间。(注意自签名证书用Rsa…

Android之应用APN、WIFI、GPS定位小例子

转自一个网上项目&#xff0c;由于是例子打包下载&#xff0c;出处不详。例子中自我写入注释。Activity类&#xff1a;package com.maxtech.common;import com.maxtech.common.gps.GpsTask;import com.maxtech.common.gps.GpsTaskCallBack;import com.maxtech.common.gps.GpsTa…

如果科学家封神,会有什么称号?

全世界只有3.14 % 的人关注了数据与算法之美你听说过“天雷真君”吗&#xff1f;你知道“虐猫狂人"吗&#xff1f;其实这两个称号是网友分别送给大科学家富兰克林和薛定谔的。今天让我们看看伟大的科学家们还有一些什么有趣的称号。尺规小王子高斯如来神展傅立叶勾股圣手—…

mac php mcrypt,MacOSX 10.10安装mcrypt详细教程分享

mcrypt 是使用安全技术来交换数据文件加密方法. 这是必需的&#xff0c;例如一些 Magento 的 Web 应用程序,购物车软件或一个 PHP 框架&#xff0c;比如 Laravel. 本教程在 OS X 10.10 Yosemite 经过测试。本指南是真正为用户提供了PHP运行于OSX Yosemite 的5.5.14 版本。其他下…

WPF加载高德地图

WPF开发者QQ群&#xff1a; 340500857 前言 有小伙伴问如何加载高德地图。欢迎转发、分享、点赞&#xff0c;谢谢大家~。 接着上一篇源码中放了我的 BingMap Key 请大家不要滥用&#xff0c;谢谢。也可以自行申请 BingMap Key https://www.bingmapsportal.com/效果预览&#x…

深度学习与机器学习到底什么关系?

最近广州的天气老是变幻无常&#xff0c;前脚还冻得瑟瑟发抖&#xff0c;后脚又开始夏天模式&#xff08;如下图&#xff09;&#xff0c;让小天甚是怀念每天艳阳高照的夏天&#xff0c;虽然热了点但好歹不用担心猝不及防地收到寒风暴雨黄色预警。说到夏天&#xff0c;不得不提…

全选按钮的使用。winfrom程序中,对全选按钮的理解,欢迎拍砖!

最近在做公司项目时&#xff0c;用到了一些单选多选的处理情况。特编辑此文&#xff0c;欢迎批评指正。&#xff08;有图有真相&#xff09; winfrom程序。 首先&#xff0c;需要绑定某些用户&#xff0c;该用于由当前登陆用户获取。 private void BindUser() { …

php 新浪面试题,php程序员面试题(新浪篇)

新浪PHP工程笔试题1. 写一个函数&#xff0c;尽可能高效的&#xff0c;从一个标准 url 里取出文件的扩展名例如: http://www.sina.com.cn/abc/de/fg.php?id1 需要取出 php 或 .php2. 在 HTML 语言中&#xff0c;页面头部的 meta 标记可以用来输出文件的编码格式&#xff0c;以…

理工男一般不浪漫,一浪漫便值很多年

今晚是平安夜接下来就是圣诞元旦小木先祝大家幸福、快乐、健康一年一度“最佳”圣诞元旦礼物奖就要发表了中了直男毒的礼物你们挚爱的女朋友可是不要的哦今天小木就大家扒一扒满满直男的礼物是怎样的&#xff01;Part 1“男票送了我一箱木瓜&#xff0c;说是丰胸疗程&#xff0…

C#序列化与反序列化详解

什么是序列化以及如何实现序列化&#xff1f;序列化是通过将对象转换为字节流&#xff0c;从而存储对象或将对象传输到内存&#xff0c;数据库或文件的过程。主要用途是保存对象的状态&#xff0c;包括对象的数据&#xff0c;以便能够在需要是重建对象。反向过程称为 反序列化。…