发表于: 2017-12-22 23:04:49
1 591
今天做的事情:
上午看了原型图,大致分析一波。
1. 列表有多重查询,这个以前没有做过。
2. 签到功能,连续签到会给更多奖励。
3.接口的入参和出参。
明天再和小伙伴一起讨论。
多线程中的volatile关键字。Volatile变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile变量的最新值。
如上图所示,boolean running是true,在main函数里面,new T(); t 开始执行,期间sleep1秒,t.running改为false。 点击run,不加volatile,会一直执行,不会停。加上volatile之后,会显示上面的控制台信息。
这是因为,加上关键字,在一个线程去访问时,会一直执行不停止,另一个线程去获取,将running改为false,volatile使得第一个线程去更新数据,获取了false,才停止下来。所以volatile作用是可见性,在两个线程共同访问的数据上加上。
与synchronized区别于,volatile只保证可见性,不能原子性,而synchronized既保证原子性也保证可见性。
IO流。基本功能就是读和写,作用是读写设备上的数据,硬盘文件,内存,键盘,网络。
根据数据的走向,分为出入流和输出流。
处理的数据类型为:字节流和字符流。
字节流可以处理所有类型的数据,如图片和视频,读取一个字节,返回一个字节,在java中对应的类都是Stream结尾。
字符流只能处理纯文本数据,如txt文件,在处理时,读到一个或者多个字节,先查找指定的编码表,然后将查到的字符返回。在java中的类以,Reader 或者 Write结尾。
byte 字节:1字节等于8个二进制数,是一个存储空间。
char字符 : 字符是人们使用的记号,抽象意义上的一个符号。
1.字节读取文件内容
public static void main(String[] args) {
try {
FileInputStream file = new FileInputStream("test.txt");
//创建数组
byte input[] = new byte[70];
//以数组方式读出来
file.read(input);
String inputSteam = new String(input,"utf-8");
System.out.println(inputSteam);
file.close();
} catch (Exception e) {
e.printStackTrace();
}
}
2.字节写入文件内容
public static void main(String[] args) {
try {
FileOutputStream fos = new FileOutputStream("testWrite.txt");
String outString ="你好,我喜欢你";
byte output[] = outString.getBytes();
fos.write(output);
System.out.println("写入成功!");
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
3.以字节读取一张gif图片,和复制一张
public static void main(String[] args) {
try {
//读这个文件
FileInputStream fileInputStream = new FileInputStream("229a4e941933f701fa6493f4d046c617.gif");
//写这个文件
FileOutputStream fileOutputStream = new FileOutputStream("1.gif");
//数组
byte input [] = new byte[100];
//
while (fileInputStream.read(input)!=-1){
fileOutputStream.write(input);
}
fileInputStream.close();
fileOutputStream.close();
System.out.println("done");
} catch (Exception e) {
e.printStackTrace();
}
}
4. 以字符读取和字符写入
public static void main(String[] args) {
try {
//File file = new File("test.txt");
FileInputStream fileInputStream = new FileInputStream("test.txt");
FileOutputStream fileOutputStream = new FileOutputStream("test_new.txt");
//转化为字符
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"utf-8");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
char input[] = new char[100];
// //读取所有
// while (inputStreamReader.read(input)!=-1){
// System.out.println(new String(input));
// }
//指定读取到 L 的长度
int l = 0;
while ((l = inputStreamReader.read(input)) != -1){
System.out.println(new String(input,0,l));
outputStreamWriter.write(input);
System.out.println("写入成功");
}
inputStreamReader.close();
fileInputStream.close();
outputStreamWriter.close();
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
遇到的问题:
无
收获:
看了原型图,感觉还是可以做的。多线程和IO流,这块学习。明天写接口文档和集合。
评论