发表于: 2017-12-22 23:04:49

1 592


今天做的事情:


                 上午看了原型图,大致分析一波。


                  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流,这块学习。明天写接口文档和集合。




返回列表 返回列表
评论

    分享到