Java数据流,有写入写出之分;还有byte数据,和char(文字)数据之分。
基本涵盖所有情况,其他只是使用更简洁的类来操作。
先看看Java基本数据有(总体如下图):
一,引用型(reference):
二,基本型(primitive):
2.1数字型(整型):
byte short int long char,分别用8、16、32、64、16bits表示。
2.2浮点型:
float(32bit),double(64bit)
2.3整型字面值
2、8、16进制的表示分别在最前面加上0B(0b)、0、0X(0x)即可
2.4字符及字符串字面值
\ddd(八进制)、\uxxxx(十六进制Unicode字符)、'(单引号)、"(双引号)、\(反斜杠)\r(回车符)\n(换行符)\f(换页符)\t(制表符)\b(回格符)
/**
* 字符文件,读入内存(读文件)
* 字符文件,读出内存(写到文件中去)
*
* byte[]文件,读入内存(读文件)
* byte[]文件,读出内存(写到文件中去)
*如:png,jpg等文件,的读写
*转化流:InputStreamReader/OutputStreamWriter,把字节转化成字符。
*数据流:DataInputStream,DataOutputStream。
*/
private static voidbyteFile2PureDataFile()throwsIOException {
//步骤一:准备好要读入内存的文件
//情况1:复制纯数据
//File file = new File("/Users/users/Desktop/BugHunt.mp3");
//File file = new File("/Users/users/Desktop/old.png");
//情况2:复制字符等数据
File file =newFile("/Users/users/Desktop/old.txt");
//文件转化为文件流
FileInputStream fileInputStream =newFileInputStream(file);
//情况1:以数据流的形式将数据读入到内存(使用DataInputStream,BUfferedInputStream都可以)
//BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
//情况2:以字符形式将数据读入到内存(字符,图片在内存中的存储格式的区别)
InputStreamReader inputStreamReader =newInputStreamReader(fileInputStream);
//步骤二:准备好要写出内存的文件
//情况1:复制纯数据
//File fileNew = new File("/Users/users/Desktop/new.mp3");
//File fileNew = new File("/Users/users/Desktop/new.png");
//情况2:复制文字,字符等
File fileNew =newFile("/Users/users/Desktop/new.txt");
//文件转化为文件流
FileOutputStream fileOutputStream =newFileOutputStream(fileNew);
//情况1:以数据形式将数据导出内存(使用DataOutputStream,BUfferedOutputStream都可以)
//BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
//情况2:以字符形式将数据导出内存,
OutputStreamWriter outputStreamWriter =newOutputStreamWriter(fileOutputStream);
//小勺子
//情况1:以数据形式将数据导出内存
//byte[] cache = new byte[1024];//情况一:拷贝数据:图片,音频等数据的小勺子,就必须使用字节数组
//情况2:复制字符等数据
//char[] cache = new char[1024];//情况二:拷贝字符串的小勺子,就必须使用字符数组
//读到的长度(read()返回的值,可以作为单个字符的内容,也可以在使用cache时作为长度来指示)
//情况1:以数据形式将数据导出内存
//int len = bufferedInputStream.read(cache);
//情况2:复制字符等数据
intcontent =0;//不用cache,字符串为整形数,然后由系统软件等自己去解析,这样肯定会有乱码
//情况一:以数据形式将数据导出内存
//while (len != -1) {
//情况2:复制字符等数据
//while (((content = inputStreamReader.read(cache))!= -1)) {
while(((content = inputStreamReader.read()) != -1)) {
//情况1:以数据形式将数据导出内存
//bufferedOutputStream.write(cache, 0, len);
//情况2:复制字符等数据
//outputStreamWriter.write(cache, 0, content);//用cache
outputStreamWriter.write(content);//不用cache
//情况1:(比较特殊的地方)以数据形式将数据导出内存//byte文件,读取小勺子的长度,这里一定要每次更新长度
//len = bufferedInputStream.read(cache);
}
//最后注意关流的顺序(先关流入内存的数据,再关流出内存的数据)情况1:以数据形式将数据导出内存
//bufferedInputStream.close();
//情况2:复制字符等数据
//inputStreamReader.close();
fileInputStream.close();
//情况1:以数据形式将数据导出内存
//bufferedOutputStream.close();
//情况2:复制字符等数据
outputStreamWriter.close();
fileOutputStream.close();
}