java学习笔记十二
1.
Java IO
主要分为字节流(byte stream)
字符流 (characterstream)
实现这两种流的输入流与输出流分别是 InputStream OutputStream
、Reader Write。这四个类都是抽象类,所以只能被继承使用。
2.
与文件打交道肯定是要用到输入和输出流的,所以Java专门提供了读取文件数据的类FileInputStream,它继承了InputSteam属于字节流
要牢记其中的几个重要的方法:
读取文件的数据:
有三个read方法,其中最常用的是
int read(byte[] b,int off, int length)
其中 byte[] 用来存放文件中的数据信息,所以要有byte型数组;
int off 表示从那个字节开始读取数据;一般都从零开始;
int length 表示每次读取的长度,长度不能大于byte数组的长度;
另外,字节是不能被输出的,String类中提供了构造方法:
String (byte[] b, int off, int length ),就是将字节转换为字符;
看下面的程序:
当对一个流进行操作时,必须要有一下四部:
1. 打开流
2. Boolean类型的语句 判断流中的信息还有没有
3. 对流进行读入或写出
4. 关闭流;
packagecom.jianjian.IO;
importjava.io.FileInputStream;
importjava.io.IOException;
public classFileTest9
{
public static void main(String[] args)throws IOException
{
FileInputStream file = new FileInputStream("F:/永建/个人数据/永建.txt");
byte[] b = new byte[100];
int length;
while (-1 != (length =file.read(b,0,100)))
{
String s = newString(b,0,length);
System.out.println(s);
}
file.close();
}
}
这个程序是很典型的,以后会用到很多,所以一定要牢记!
2.
Java中将集合转换为数组的方法 :
toArray(new array [length]);
将数组转换为集合的方法
asList(array) 返回list 列表;
3.
记得以前说过String类型是final类型的是不可变的类型,Java中存在可变的字符串类型 StringBuffer类型
4.
字节流中的两个重要的分支: 节点流、过滤流(filterInputStream);
字节流总是与源头打交道;
5.
输出流,OutputStream:
可以创建文件,并向文件中追加内容(FileOutputStream);
与输出流反过来的是,用户输入的是字符串,要转换成字节;String类中同样提供了方法String.byte(String[] b);
看下面的程序:
创建一个txt文件并将“helloworld !”写入文件:输出流
将文字从内部传到外部;不要混淆!
package com.jianjian.IO;
import java.io.FileOutputStream;
import java.io.IOException;
public class OutputStream
{
public static void main(String[] args)throws IOException
{
FileOutputStream file = new FileOutputStream("c:/test.txt");//创建一个新文件
String s = "helloworld!!";
byte[] b = s.getBytes();//将字符串转换成字节
file.write(b);//将字节写入文件;
file.close();//关闭流;
}
}
6.
BufferOutputStream: 缓冲区输出流
计算机中的缓冲区
缓冲器为暂时置放输出或输入资料的内存。
缓冲器内资料自储存设备(如硬盘)来,放置在缓冲器中,须待机送至CPU或其他运算设备。
缓冲区(buffer)这个中文译意源自当计算机的高速部件与低速部件通讯时,必须将高速部件的输出暂存到某处,以保证高速部件与低速部件相吻合. 后来这个意思被扩展了,成为"临时存贮区"的意思。
与缓冲打交道的其实就是计算机的内存了,BufferdeOutputStream的作用其实就是包装 一个输出流类型的对象,它的构造方法是
BufferedOutputStream(OutputSteams)
那么这个类的作用到底是什么呢?
比如说如果像上面那样,只让单纯的输出字节,程序每次只能将一个字节读入到文件中去,如果有一百个字节,就要读一百次。如果加上缓存包装,就可以先将字节存储在内存中,待需要时一次性传入到文件或硬盘中,极大的提高了效率!!
看下面的程序:
好处在与大量数据交互时会得到体现
package com.jianjian.IO;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
public class FileTest10
{
public static void main(String[] args)throws Exception
{
FileOutputStream file = new FileOutputStream("c:/jianjian.text");
BufferedOutputStream bz = new BufferedOutputStream(file);
bz.write("www.jianjian.com".getBytes());
bz.close();
}
}
7.
字节占八位
Int型占32位
8.
晕了:在输入流中的read方法返回的竟然是 字符!!!!
public int read();可是方法上明明写的是一个整型!!
是这样的,Java中的字符使用是用整型来表示的,只取后面的八位
package com.jianjian.IO;
public class FileTest11
{
public static void main(String[] args)
{
char a ='a';
int b = (int)a;
System.out.println(b);
}
}
打印出 97;
package com.jianjian.IO;
public class FileTest11
{
public static void main(String[] args)
{
char a= 'a';
System.out.println((int)a);
}
}
打印出97
package com.jianjian.IO;
public class FileTest11
{
public static void main(String[] args)
{
int a = 97;
System.out.println((char)a);
}
}
打印出a;
下面的程序将会非常有用:因为它会显示出各种字符所代表的整型值
package com.jianjian.IO;
public class FileTest11
{
public static void main(String[] args)
{
int a= 65;
System.out.println((char)a);
}
}
大写的A 65;
小写的a 97;
9.
下面讲 字节数组输出流 ByteArrayIntputSteam 类似于FileIntputStream 它是从字节数组中读取数据的;
它的构造方法接收一个字节型数组,表示操作的对象:
/*
* 将输入的字节数组中的字母,按大小写的形式,各输出一遍
*/
package com.jianjian.IO;
import java.io.ByteArrayInputStream;
import java.io.IOException;
public class FileeTest12
{
public static void main(String[] args)throws IOException
{
String s = "abcdefg";
byte[] b = s.getBytes();
ByteArrayInputStream array = new ByteArrayInputStream(b);
for(int i = 0 ; i < 2; i++)
{
if(i == 0)
{
for(int j = 0 ;j < s.length(); j ++)
{
System.out.println((char)(array.read()));
}
}
else
{
for(int k = 0 ; k < s.length(); k ++)
{
System.out.println(Character.toUpperCase((char)array.read()));//利用字符包装类来将字符变为大写
}
}
/*
* 我们也看到了read方法每执行一次都会指向下一个字节,要想实现我们的目标必须要将指针重新指向首字节!
* 不指向的话就是返回 -1,转换成字节后就是?????,开发人员果然很聪明!
* reset方法的作用就是使指针指向mark标记处,这里没有用到mark方法,表示从零开始!
*/
array.reset();
}
System.out.println();
array.close();
}
}
10.
当然也有所谓的字节数组输出流,即从内部将数据写入到字节数组当中!
ByteArrayOutputStream;
并且字节数组输出流中有一个方法
writeTo(OutputStream s)即将字节数组输出流中的字节数组直接写入到其他的输入流中,比如说文件输出流!
package com.jianjian.IO;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileTest13
{
public static void main(String[] args)throws IOException
{
String s = "hello worldwelcome";
byte[] b = s.getBytes();
ByteArrayOutputStream array = new ByteArrayOutputStream();
array.write(b);//到这里就将字节存储到字节数组输出流当中,再将其拿出来即可
byte[] bb = array.toByteArray();//该方法返回字节数组
for(int i = 0 ; i <bb.length; i ++)
{
System.out.println((char)bb[i]);
}
FileOutputStream file = new FileOutputStream("c:/really.txt");
array.writeTo(file);//将字节写入到文件中;
array.close();
file.close();
}
}
java学习笔记十二相关推荐
- 反射、Lambda表达式(Java学习笔记十二)
文章目录 反射 Class 类 创建运行时类的对象 获取运行时类的完整结构 调用运行时类的指定结构 调用指定方法 调用指定属性 关于setAccessible方法的使用: 动态代理 Lambda表达式 ...
- java学习笔记(十二)----集合
集合类 集合类用于存储一组对象,其中的每个对象称之为元素,经常会用以的有Vector,Enumeration,ArrayList,Collection,Iterator,Set,List等集合和接口 ...
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
- java学习笔记(二十八)——开发一个小项目(VMeeting3.0)
上篇文章按照较规范的产品需求文档梳理了项目的逻辑,感觉开发起来明晰了很多:挂上一篇文章java学习笔记(二十七)--开发一个小项目(VMeeting2.0)_Biangbangbing的博客-CSDN ...
- Python语言入门这一篇就够了-学习笔记(十二万字)
Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...
- 吴恩达《机器学习》学习笔记十二——机器学习系统
吴恩达<机器学习>学习笔记十二--机器学习系统 一.设计机器学习系统的思想 1.快速实现+绘制学习曲线--寻找重点优化的方向 2.误差分析 3.数值估计 二.偏斜类问题(类别不均衡) 三. ...
- ROS学习笔记十二:使用roswtf
ROS学习笔记十二:使用roswtf 在使用ROS过程中,roswtf工具可以为我们提供ROS系统是否正常工作的检查作用. 注意:在进行下列操作之前,请确保roscore没有运行. 检查ROS是否安装 ...
- Polyworks脚本开发学习笔记(十二)-输出和读取文本文件
Polyworks脚本开发学习笔记(十二)-输出和读取文本文件 Polyworks作为一个测量工具,将测量的数据方便的导出到文本文件则是一项必须的功能.在DATA_FILE这个命令下提供了很多子命令用 ...
- OpenCV学习笔记(十二)——图像分割与提取
在图像处理的过程中,经常需要从图像中将前景对象作为目标图像分割或者提取出来.例如,在视频监控中,观测到的是固定背景下的视频内容,而我们对背景本身并无兴趣,感兴趣的是背景中出现的车辆.行人或者其他对象. ...
最新文章
- 计算机网络动画是什么软件,把动漫人头p人身上的软件叫什么 软件介绍
- P5431-[模板]乘法逆元2【递推】
- 后端在插入数据发现重复如何正确的弹出警告_前百度面试官整理的——Java后端面试题(一)...
- Simulink之负载换流式无源逆变电路
- 自学python买什么教材-学习Python的正确姿势—基础教学,教科书该怎么买?
- xshell简单使用
- 27. 安全 HTTP (2)
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_13-删除页面-前端-Api调用...
- docx4j书签的妙用
- [IOS APP]婷婷诗教-有声系列
- pow函数php,PHP pow( )用法及代码示例
- 【附案例】UI交互设计不会做?设计大神带你开启动效灵感之路
- 软件自动化测试的的设计标准和适用范围
- 小鸟云服务器如何进行远程桌面连接?
- java面试基础题整理(二)
- 【java删除指定文件夹或者文件】
- 解决cmd中,javac提示:javac不是内部或外部命令,但是运行java、java-version正常的问题
- 【蓝桥杯】历届试题 对局匹配(C++)
- 7种方法实现数组去重
- 【python】根据文件(图片)名字,删除符合条件的文件(图片)
热门文章
- 大华监控服务器显示感叹号灯亮,仪表盘出现黄色感叹号灯亮什么问题
- 无法想mysql进行插入_mysql 无法插入中文
- 在Linux中安装R语言包,遇到无法验证下列签名的错误
- Codeforces344_C(数学思维)
- 逆向工程核心原理读书笔记-API钩取之计算器显示中文数字
- 棋牌游戏服务器架构: 详细设计(一) 内核设计
- 面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?
- Linux IO磁盘篇整理小记
- 音视频技术开发周刊 88期
- 探索多媒体开发最新最佳实践,我们在深圳等你