java 20 - 8 字节流的文件复制以及汉字在计算机中的存储方式
复制文本文件:把当前目录下的FileIntputStream.java文件里面的内容复制到当前目录的b.txt文件中
分析:
数据源:
FileIntputStream.java -- 读取数据 -- FileInputStream
目的地:
b.txt --- 写入数据 ---- FileOutputStream
思路:首先读取数据源的内容,然后把读取到的内容再写入到目的地中
前提:数据源存在,否则会报错
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFileDemo1 { public static void main(String[] args) throws IOException {
//首先从数据源中读取数据
//创建字节输入流
FileInputStream in = new FileInputStream("a.txt");
//创建字节输出流
FileOutputStream out = new FileOutputStream("b.txt");
//使用读取字节的方式读取数据
int by = 0;
while((by = in.read()) != -1){
//读取到的数据直接输入到目的地中
out.write(by);
}
in.close();
out.close();
} }
在上述的a.txt文件中,就算是中文,也能够完整复制到b.txt里面。
原因:因为这里是从数据源中读取数据后,并没有进行转码,又直接复制到目的地中。
说到这里,就有个疑问:计算机是怎么对汉字进行存储的?
String s = "中国是我们的祖国;
byte[] bys = s.getBytes();
System.out.println(Arrays.toString(bys));
结果是:[-42, -48, -71, -6, -54, -57, -50, -46, -61, -57, -75, -60, -41, -26, -71, -6]
从就可以看出,在计算中,汉字的存储是分成两个字节的:
第一个字节肯定是负数。
第二个字节常见的是负数,可能有正数。但是没影响。
复制图片、视频、MP4之类的一样的操作,只是后两者的读取数据方式应该用
int read(byte[] b):一次读取一个字节数组
需求:复制D:\music\音乐里的Beyond - 真的爱你.mp3到文件目录下
//使用字节输入流输出mp3文件
//定义字节输入流对象
FileInputStream in = new FileInputStream("D:\\music\\音乐\\Beyond - 真的爱你.mp3");
//定义字节输出流对象
FileOutputStream ou = new FileOutputStream("真的爱你.mp3");
//使用输入字节数组的方法输入内容
//定义一个字节数组
byte[] by = new byte[1024];
int i = in.read();
while(i != -1){
//使用字节输出流输入内容
ou.write(by,0,i);
}
in.close();
ou.close();
字节流的两种读取方式的图解:

java 20 - 8 字节流的文件复制以及汉字在计算机中的存储方式的更多相关文章
- 递归、字节流、文件复制_DAY20
1:递归(理解) (1)方法定义中调用方法本身的现象. (2)递归注意事项: A:要有出口,否则就是死递归. B:次数不能太多,否则内存溢出. 特殊事项:构造方法不能递归定义. 例子:cn.itcas ...
- 采用Java语言如何实现高速文件复制?
今天review代码也看到了"大神"用老方法来实现文件拷贝.今天归结一下使用Java语言怎样实现高速文件复制: 代码1--使用文件通道的方式: import java.io.Fil ...
- QList介绍(QList比QVector更快,这是由它们在内存中的存储方式决定的。QStringList是在QList的基础上针对字符串提供额外的函数。at()操作比操作符[]更快,因为它不需要深度复制)非常实用
FROM:http://apps.hi.baidu.com/share/detail/33517814 今天做项目时,需要用到QList来存储一组点.为此,我对QList类的说明进行了如下翻译. QL ...
- java 20 -10 字节流四种方式复制mp3文件,测试效率
电脑太渣,好慢..反正速率是: 高效字节流一次读写一个字节数组 > 基本字节流一次读写一个字节数组 > 高效字节流一次读写一个字节 > 基本字节流一次读写一个字节 前两个远远快过后面 ...
- JAVA(IO流)文件复制
package com.am; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOEx ...
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...
- Java实现文件复制的四种方式
背景:有很多的Java初学者对于文件复制的操作总是搞不懂,下面我将用4中方式实现指定文件的复制. 实现方式一:使用FileInputStream/FileOutputStream字节流进行文件的复制操 ...
- Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目 ...
- 将引用了第三方jar包的Java项目打包成jar文件的两种方法
方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目 ...
随机推荐
- Smtp邮件发送系统公用代码整理—总结
1.前言 a.在软件开发中,我们经常能够遇到给用户或者客户推送邮件,推送邮件也分为很多方式,比如:推送一句话,推送一个网页等等.那么在系统开发中我们一般在什么情况下会使用邮件发送呢?下面我简单总结了一 ...
- JQuery插件validate的Remote使用
JQuery.validate.js 在表单验证中经常使用,初学,对于其中Remote的使用说明一下. 1. 基本解释 JQuery主要用于DOM树和CSS树的检索和后面的操作的一套方法,JQuery ...
- WP多语言
WP多语言.本地化 建立一个Resources文件夹,再建立两个文件夹en-US和zh-CN,(分别表示美国英语.中文中国),每个文件夹下再新建资源文件(.resx),在资源文件中添加示例信息 新建一 ...
- JavaScript中instanceof运算符的用法以及和typeof的区别
instanceof : 判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例:返回boolean类型栗子①: var aColors = ["red", "g ...
- Nunit在VS2010加载不了程序集的解决办法
本机环境: Win7 64位 旗舰版 VS2010 Nunit2.6.3 故障重现步骤: 1.在启动外部应用程序中增加C:\Program Files (x86)\NUnit 2.6.3\bin\nu ...
- C语言中void*详解及应用
void在英文中作为名词的解释为“空虚:空间:空隙”:而在C语言中,void被翻译为“无类型”,相应的void *为“无类型指针”.void似乎只有“注释”和限制程序的作用,当然,这里的“注释”不是为 ...
- iOS--开发之手势解锁
本文主要介绍通过手势识别实现手势解锁功能,这个方法被广泛用于手机解锁,密码验证,快捷支付等功能实现.事例效果如下所示. 首先,我们先分析功能的实现过程,首先我们需要先看大致的实现过程: 1.加载九宫格 ...
- iOS开发之网络编程--1、NSURLSession的基本使用
前言:学习NSURLSession的使用之前,先学习一篇关于NSURLSession的好文章<From NSURLConnection to NSURLSession>或者是国内的译文&l ...
- iOS开发之网络编程--使用NSURLConnection实现文件上传
前言:使用NSURLConnection实现文件上传有点繁琐. 本文并没有介绍使用第三方框架上传文件. 正文: 这里先提供用于编码测试的接口:http://120.25.226.186:3281 ...
- spring中的 classpath* 存在可移植性问题
classpath* 的可移植性问题,许多人都应该遇到过了.下面就是一个例子(使用的是spring4.1.5和mybatis3.2.8): <bean id="sqlSessionFa ...