信号转化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检查当前线程是否被中断。
信号转化java_Java基础知识回顾-7相关推荐
- Java基础知识回顾之七 ----- 总结篇
前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...
- php基础知识总结大全,php基础知识回顾 —— 常量
您现在的位置是:网站首页>>PHP>>php php基础知识回顾 -- 常量 发布时间:2019-01-23 17:23:08作者:wangjian浏览量:489点赞量:0 在 ...
- java知识点博客园_JAVA基础知识回顾
JAVA基础知识回顾 一.背景介绍 JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版) JavaEE(J2EE)(Java 2 Platfo ...
- C语言基础知识回顾 2-三种基本机构
C语言基础知识回顾 %超适用于计算机二级% 第二章 三种基本结构 本章回顾最基本的顺序.条件.循环语句的语法结构,对于非初学者来说,这一部分内容想必早就信手拈来. 因此,回顾的侧重点都是一些需要注意的 ...
- 【Java基础知识回顾篇】之打怪升级Day001
Java基础知识回顾篇之打怪升级Day001 目录 Java基础知识回顾篇之打怪升级Day001 简介 一.为什么现在主流的是Java8和Java11? 二.简单尝试编写java程序 1.编写一个He ...
- Java基础知识回顾之一 ----- 基本数据类型
前言 在开始工作至今,学习各种各样的技术之中发现自己的很多Java的基础知识都忘了⊙﹏⊙b汗... 而且越是学习越是发现Java基础的重要性,所以准备单独抽一下时间进行Java基础的重新学习.在重新学 ...
- 前端开发入门:html和css基础知识回顾2
HTML+CSS基础知识 1.对WEB标准以及W3C的理解与认识 标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索几率.使用外 链css和js脚本.结构行为表现的分离.文件下载与页面速度更快.内容能被 ...
- JavaSE基础知识回顾
文章目录 JavaSE 一.前言 1.1.解决大家的疑惑 1.2.Java和Python的抉择 1.3.走进Java 二.预科 2.1.学习准备:博客 2.2.MarkDown 2.3.基本Dos命令 ...
- Java基础知识回顾之六 ----- IO流
前言 在上一篇文章中,回顾了Java的多线程.而在本篇文章中主要介绍Java IO的相关知识. IO的介绍 什么是IO? IO的名称又来是Input与Output的缩写,也就是输入流和输出流.输入流用 ...
最新文章
- 解题报告(十三)中国剩余定理(ACM / OI)
- (二)使用xshell连接ubuntu
- 部署到ABAP服务器上的SAP UI5应用,其index.html的读取逻辑
- JMeter场景设置与监控
- 04737 c++程序设计 第二章 课后程序设计题 第一题
- 【BZOJ】1756: Vijos1083 小白逛公园(线段树)
- mysql 批量删除之大坑
- html页面上使用vlc,【JSJQuery】使用VLC在html中播放rtsp视频
- java 同步与异步区别_同步和异步有何异同,在什么情况下分别使用它们?
- 注解之RetentionPolicy,ElementType
- json爬虫获取列表数据不全,已解决
- 如何在Windows上制作一个包含.lib和.dll的Rust Crate包
- 读书笔记:《浪潮之巅》
- android 7红米3,红米7 3+64也并没有想象中那么差,开箱+上手初体验
- 虚拟化技术——虚拟存储
- git rebase和git merge使用方法详解
- win10怎么设置计算机语言,Win10系统怎么设置中文语言_windows10怎么把系统语言设置成中文...
- 小鼠肺内皮细胞 (MPEC)
- HTML+CSS+JS实操京东购物车
- 菜鸟教程RSI指标详解:该如何学习RSI指标详解?
热门文章
- .Net思想篇:为何我们需要思想大洗礼?
- 好代码是管出来的——.Net中的代码规范工具及使用
- 别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework
- 截取url的host_java正则表达式获取url的host示例
- 剑指offer之数组中的逆序对
- C和指针之auto和内存栈和register关键字
- LeetCode之Two Sum II - Input array is sorted
- 带圈汉字 在线生成_手写签名在线生成器-手写签名在线生成器可复制
- 一个程序如何连接到外网_如何开发制作小程序?做一个电商带直播小程序
- 抛物面天线的工作原理是什么?