Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6052868
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: Android平台

2013-07-11 02:05:26

首页,感谢你的阅读,本人观点:学习编程是个漫长的过程并不是一时就会很厉害的,关键是坚持,快乐地学习,在这里分享我的一些笔记给你;
  在写Android的数据存储之前,想温故下Core Java中的I/O流。一是为巩固基础,二是为更好掌握Android的数据存储打基础!


  IO:即输入,输出。学IO:


  先学好一个包: java.io.*。


  学java.io.*包之前,先要明白:流的概念。


  理解了‘流’之后就要区分字节流与字符流。


  当以上都理解之后,就可以去练习相关的类。


  当相关的类掌握之后,就去学习序列化。


  当以上知识点都学习并且掌握之后,就可以去学习如何使用NIO.


  这是大致的学习路线图,另外补充一点,NIO我也不太熟悉,相关笔记以后在补上!


  java.io.*总共有86个类(如果没有算错的话),不建议每个类或接口都掌握,学习的目的是用于生产,所以掌握能干活的并且经常使用的类即可,我主张学于致用!


  关于流的思考:


  我们见过河流,相信不少人还在其中嬉戏打闹游泳过。我喜欢河流,并且在其中裸泳是件很美妙的事情。河流通常都会有源头并且大多位海拔较高或者相当的高区位,河流的终点往往是某大型湖泊或海洋,它流动的趋势是从高向底,弯曲游走;它是动态的,是变化的!我们可以抽象些讲: 是按一定规律运动的;再抽象点:是自然界中脉络相通的排泄降水径流的天然输水通道;再再抽象点:河流是通道,是按某种轨迹运动变化的水的抽象!当淤泥过多时,它会阻塞膨胀;当大坝筑起后,它可以蓄水防洪。它的载体是大地。


  输入流:海拔较高或者相当的高区位


  输出流:某大型湖泊或海洋


  中间层:是水的通道


  讲河流与IO有什么关系呢? 有个概念抽象的关系。IO中流是对有序数据抽象。那有序数据就好比是水,它的输入不在是高海拔的山区而是键盘,鼠标等设备,它的输出不在是湖泊与海洋而是文件或屏幕;水是变化动态的,有序的数据也是变化,动态的。IO会阻塞,也有缓存,java中的IO与平台无关,它的载体是操作系统。这就是相关性,也是我的感悟;不一定最好,只是可以通过生活中的事物进行联想理解而以。


  输入流:键盘,鼠标等设备


  输出流:文件或屏幕


  中间层:数据通道


  总结下: 流: 英译stream:


  "一头一口":源头与出口,即输入与输出;


  是有序且变化着的;


  有阻塞,有缓存;


  不理会大地与平台,专注与它的实现。


  我们回到具体的实现中来:数据从服务器通过网络流向客户端,我们称Server端的程序为输出流(把数据输出到网络),Client端内存负责从网络里读取数据,称之为:输入流。


  输入流: 读取数据;


  输出流:写入数据;


  中间层:网络数据通道;


  因此我们就能很好的以中间层为轴判断输入流与输出流了!eg:网络从Server端读取数据然后向Client中写入数据!


  字节流与字符流:它们之的区别就在于数据单元不同而以;字节流操作的数据单元是8位的字节,而字符流操作的数据单元是16位的字节。


  File


  File与内容无关,它是文件本质上抽象并且包含一系列与文件相关的方法。


  与文件名相关:String getName(),String getParent(),String getAbsolutePath()


  检测文件:boolean isAbsolute(), boolean exists(),boolean isDirectory(),boolean isFile()  大多是is系列方法


  文件及目录操作:boolean mkdir(),String[] list(),File[] listFiles(),boolean createNewFile(),boolean delete(),void deleteOnExit()在Android调用此方法应当注意,具体原因请查阅文档,它比我解释的更好: developer.android/reference/java/io/File.html#deleteOnExit()


  输入流: InputStream/Reader 拥有一系列read方法


  InputStream 是字节输入流的超类


  Reader是字符输入流的超类


  输出流: OutputStream/Writer 拥有一系列write方法


  OutputStream 字节输出类的超类


  Writer 字符输出流的超类


  输出流代码:


  static void demo0() throws Exception {


  try (OutputStream outputStream = new FileOutputStream("demo1.txt")) {


  outputStream.write("First 'demo' for how to use 'OutputStream' !"


  .getBytes());


  }


  System.out.println("Over");


  }


  看到这段代码,是不是感觉有点奇怪?别紧张.


  上段代码是Java 7中异常新特性:try-with-resources: 它可以自行进行资源管理,例如上例就不需要手动close;需要注意的是:try(/* 此处可以是代码块 */),这种语法节省的好多代码。


  OutputStream是个抽象类,它必须通过子类来进行实例化。


  OutputStream主要分为二种功能


  字入数据的write系列方法


  参数为byte: 单一字节


  参数为byte数组


  参数为byte数组和数组中的起始位置与长度


  流的控制


  关闭:close


  刷新保存:flush: 其实不必手动flush。第一:当内部缓冲期满过,它会自动自动执行flush;第二:当invoke close方法时,会自动执行flush。


  输入流代码:


  static void demo1() throws IOException{


  InputStream inputStream =null;


  try {


  inputStream = new FileInputStream("demo0.txt");


  byte[] bb = new byte[1024];  //缓冲区


  int temp;


  while((temp=inputStream.read(bb))!=-1){


  System.out.println(new String(bb, 0, temp));


  }


  } catch (FileNotFoundException e) {


  // TODO Auto-generated catch block


  e.printStackTrace();


  }finally{


  if(inputStream!=null){


  inputStream.close();


  }


  }


  }
知识就是力量,别人学用知识来赚钱的成本低,在达内学习到编程是铸造梦想的地方,如果你喜欢编程,这里,有我们共同语言,共同的故事,共同的梦想!
(责任编辑:广州达内)
阅读(583) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~