
Java编程思想
java
ZacharyZheng1
你若精彩,天自安排
展开
-
使用“持久性”
对比序列化前后的对象地址同一个字节序列号数据反序列化得到的相同对象的地址也相同。不同的流产生了完全不同的对象。package com.zachary.io.serializable;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Se原创 2020-06-03 16:55:49 · 255 阅读 · 0 评论 -
序列化控制
实现Externalizable重写writeExtrenal()和readExternal()方法。这两个方法在序列化和反序列化的时候会自动调用。package com.zachary.io.serializable;import java.io.Externalizable;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.Obj原创 2020-06-03 16:46:34 · 206 阅读 · 0 评论 -
对象序列化
Java序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够将字节序列恢复成原来的对象。利用它可以实现轻量化的持久性。对象序列化加入到语言中是为了支持两种主要特性。一是Java远程调用,它使存活于其它计算机上的对象使用起来就向存活于本机一样。当向远程发送数据时,需要序列化来传送参数和返回值。只要对象实现了Serializable接口,对象序列化出理就会非常简单。ObjectOuputStream ObjectInputStream对象序列化demopackage c.原创 2020-06-03 16:26:05 · 140 阅读 · 0 评论 -
压缩
压缩类功能CheckedInputStreamGetCheckSum()为任何InputStream产生校验和(不仅是解压缩)CheckedOutputStreamGetCheckSum()为任何OutputStream产生校验和(不仅是压缩)DeflaterOutputStream压缩类基类GZIPOutputStream一个DeflaterOutputStream,用于将数据压缩成为zip文件GZIPInputStream一个InflaterInpu...原创 2020-06-02 15:59:01 · 261 阅读 · 0 评论 -
文件加锁
文件加锁通过对FileChannel调用lock()或tryLock(),可以获得整个文件的FileLock。tryLock()是非阻塞的,它试图获得锁,如果不能获得将直接从方法调用中返回。lock()是阻塞的,它会阻塞进程直到锁可以获得,或调用lock()的线程中断,或调用lock()的通道关闭。FileLock.release()可以释放锁。参数说明tryLock(long position, long size, boolean shared)lock(long position, l原创 2020-06-02 14:24:26 · 302 阅读 · 0 评论 -
内存映射文件
MappedByteBuffer内存映射文件允许我们修改和编辑那些因为太大不能放入内存的文件。java.nio.channels.FileChannel.map(MapMode mode, long position, long size) throws IOExceptionpackage com.zachary.io.nio.mapped;import java.io.FileNotFoundException;import java.io.IOException;import java.原创 2020-06-02 14:03:45 · 175 阅读 · 0 评论 -
缓冲器操纵数据
ByteBuffer是将数据移进移出的唯一方式,并且只能创建基本类型的缓冲器,或者通过”as“从ByteBuffer中获得缓冲器。缓冲器细节方法功能capacity()返回缓冲区容量clear()清空缓冲区,将position设置为0,limit设置为容量。可以调用次方法复写缓冲区flip()将limit设置为position,position设置为0。用于为读取缓冲区数据做准备limit()返回limit值limit(int lim)设置limit原创 2020-06-02 13:53:57 · 165 阅读 · 0 评论 -
获取基本数据类型,视图缓冲器
获取基本数据类型java.nio.ByteBufferasCharBuffer() : getChar()asShortBuffer() : getShort()asIntBuffer() : getInt()asLongBuffer() : getLong()asFloatBuffer() : getFloat()asDoubleBuffer() : getDouble()package com.zachary.io.nio;import java.nio.ByteBuffer;原创 2020-06-02 13:28:09 · 209 阅读 · 0 评论 -
数据转换
数据转换java.nio.charset.CharsetString encoding = System.getProperty(“file.encoding”); // 发现默认字符集,产生代表字符集名称的字符串System.out.println(Charset.forName(encoding).decode(buffer));对数组编码再写ByteBuffer.wrap(“Some text”.getBytes(“UTF-16BE”))char类型转换器buffer.asC原创 2020-06-02 13:07:00 · 440 阅读 · 0 评论 -
FileChannel
FileChannelByteBuffer唯一直接与通道交互的缓冲器。FileInputStream,FileOutputStream,RandomAccessFile能够产生FileChannel。Reader和Writer不能产生Channel。但是java.nio.channels.Channels类提供了实用方法,可以在通道中产生Reader和Writer。package com.zachary.io.nio;import java.io.File;import java.io.FileI原创 2020-06-02 13:06:43 · 217 阅读 · 0 评论 -
进程控制Process
java内部执行其它操作系统的程序,并要控制这些程序的输入和输出。package com.zachary.io.command;import java.io.BufferedReader;import java.io.File;import java.io.InputStreamReader;import com.zachary.util.OSExecuteException;/** * @author Zachary.Zheng * @version 1.0 * @date 202原创 2020-05-30 16:58:41 · 243 阅读 · 0 评论 -
标准I/O
从标准输入中读取package com.zachary.io.standard;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/** * @author Zachary.Zheng * @version 1.0 * @date 2020年5月30日 下午3:41:47 */public class Echo { public static void原创 2020-05-30 16:53:55 · 157 阅读 · 0 评论 -
文件读写实用工具
package com.zachary.io.file.util;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.Arrays;import java.util.TreeSet;/** *原创 2020-05-30 11:03:29 · 249 阅读 · 0 评论 -
I/O流的典型使用方法
缓冲输入文件BufferedReader当readLine()返回null时,代表已经达到了文件末尾。package com.zachary.io.input;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileReader;import java.io.IOException;import java.io.InputStreamReader;/** * @author Zach原创 2020-05-30 10:59:27 · 216 阅读 · 0 评论 -
Reader+Writer+RandomAccessFile
Reader、WriterReader和Writer提供兼容Unicode与面向字符编码的I/O操作。让Reader和Writer继承层次结构主要是用来实现国际化。InputStream和OutputStream只能出理8为的字节流,不能很好的出理16位的Unicode字符。适配器: InputStreamReader用于InputStream类型转为Reader类型。OutputStreamWriter用于OutputStream类型转为Writer.数据的来源和去处Java1.0类相原创 2020-05-16 17:12:25 · 163 阅读 · 0 评论 -
InputStream + OutputStream
输入输出编程语言的I/O类库中常使用流这个抽象概念,它代表有产生数据能力的数据源对象和能接收数据能力的接收端对象。任何InputStream和Reader派生而来的类都有一个read()方法,能够用来读取单个字节或者字节数组。任何OutputStream和Writer派生而来的类都有write()方法,用了写单个字节或者字节数组。InputStream...原创 2020-05-10 21:03:50 · 213 阅读 · 0 评论 -
线程之间的协作
可以通过锁(互斥)来同步两个任务,使得一个任务不会干涉另一个任务的资源。在互斥的的基础上,添加一中途径让自身挂起,知道外部感兴趣的任务被执行才重新激活。这中握手可以通过Object的wait()和notify()或notifyAll实现。java SE5还可以通过有await()和signal()、signalAll()方法的Condition对象实现。wait() notify() noti...原创 2020-05-03 21:54:38 · 162 阅读 · 0 评论 -
终结任务
线程状态一个线程可以处于四种状态之一:新建(New):就绪(Runnable):阻塞(Blocked):死亡(dead):进入阻塞状态一个线程进入阻塞状态可能是如下原因:sleep 在休眠状态,任务在指定时间内不会运行。通过调用wait()方法使线程挂起。直到线程得到了notify或这notifyAll消息,线程才会进入就绪状态。任务在等待某个输入/输出完成。在调用同步...原创 2020-05-03 15:23:36 · 282 阅读 · 0 评论 -
解决共享资源竞争
基本上所以的并发模式在解决线程冲突的问题时,都采用序列化共享资源方案。锁语句产生了互斥效果,通常把这种机制叫做互斥量。synchronizedJava中使用关键字synchronized,为解决资源冲突提供了内置支持。当某个任务对synchronized方法调用,在方法返回之前其它线程调用到synchronized标记的方法时都会阻塞。在使用并发时,将域设为private很重要,否则s...原创 2020-04-30 00:10:13 · 328 阅读 · 0 评论 -
线程中不正确的访问资源
例子-校验一个偶数生成器生成器package com.zachary.generator;/** * @author Zachary.Zheng * @version 1.0 * @date 2020年4月25日 下午5:12:24 */public abstract class IntGenerator { private volatile boolean canceled ...原创 2020-04-25 17:41:23 · 132 阅读 · 0 评论 -
多线程中的异常捕获
未捕获异常由于线程的特性,不能捕获重线程中逃逸的异常。线程中出现异常会被抛到控制台,除非采取特殊的步骤捕获这种异常。Thread.UncaughtExceptionHandler.uncaughtExcepton()uncaughtException()可以捕获未捕获的异常。当线程中没有发现uncaughtException()方法时,才会调用defaultUncaughtException...原创 2020-04-25 16:33:50 · 314 阅读 · 0 评论 -
responsiveUI
建立有响应的用户界面/** * */package com.zachary.responsive;import java.io.IOException;/** * @author Zachary.Zheng * @version 1.0 * @date 2020年4月19日 下午9:13:36 */public class ResponsiveUI extends Th...原创 2020-04-19 21:27:58 · 236 阅读 · 0 评论 -
Thread to start methods
在构造器中启动线程继承Thread/** * */package com.zachary.thread.start.mothed;/** * @author Zachary.Zheng * @version 1.0 * @date 2020年4月19日 下午5:38:22 */public class SimpleThread extends Thread { priv...原创 2020-04-19 19:45:54 · 385 阅读 · 0 评论 -
daemon + join
join一个线程内可以调用另一个线程的join(),效果是调用线程会等待另一个线程执行完才会继续执行。调用现场还可以调用可以是isAlive()方法判断调用线程是否已经执行完(返回为false时证明执行完了)。join()可以传入一个毫秒数,在这个时间内调用线程会等待另一个线程。时间到期了还没有结束,join方法总能返回。调用线程可以调用interrupt(),终断join方法,需要try...原创 2020-04-19 00:54:45 · 214 阅读 · 0 评论 -
sleep + priority + yield
sleep作用:使线程终止执行制定时间。对sleep的调用可以抛出InterruptedException异常,但是需要在run方法中捕捉。不能跨线程传播,所以只能在调用线程内处理。Thread.sleep(100);priority作用:设置线程优先级。JDK中有10种类型,但和多种操作系统都不能映射的很好。Windows中有七个优先级是不确定的,所以也是不确定的。sun的s...原创 2020-04-13 22:51:46 · 150 阅读 · 0 评论 -
runnable + callable + CachedThreadPool + FixedThreadPool
runnable实现Runnblle接口, 编写run方法,无返回值callable实现Callable接口,编写call方法,有返回值返回Future对象Future.isDone() // 判断线程是否执行完, 执行完成返回trueFuture.get() // 获取返回值。当执行get时没有判断isDone(),这时将阻塞,直到结果准备就绪。Executor 线程池cache...原创 2020-04-13 00:14:09 · 198 阅读 · 0 评论 -
并发的多面性
解决问题一般用于解决“速度”和“设计可管理性”速度进程:运行在自己地址空间内的自包容程序。线程:进程中多个分离,独立运行的任务。单个进程可以有多个线程并发执行任务。每个任务都好像有一个单独的CPU,其实是底层机制切分了CPU时间。并发增加了所谓的上下文切换,所以比顺序执行的开销大。任意时刻只有一个线程在执行使用举例:执行多个执行等待的任务时, 将CPU使用权交给其他任务,可以...原创 2020-04-12 01:04:49 · 136 阅读 · 0 评论 -
File类
boolean canRead()测试应用程序是否可以读取由此抽象路径名表示的文件。boolean canWrite()测试应用程序是否可以修改由此抽象路径名表示的文件。boolean delete()删除由此抽象路径名表示的文件或目录。boolean exists()测试此抽象路径名表示的文件或目录是否存在。File getAbsoluteFile()返回此抽象路径名的绝对形式...原创 2020-05-05 20:14:07 · 204 阅读 · 0 评论