重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
JAVA字节流
目前创新互联建站已为超过千家的企业提供了网站建设、域名、虚拟主机、绵阳服务器托管、企业网站设计、槐荫网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
是每次从文件中读取单个字节
字符流是每次读出1个字符
相当于每次读出2个字节
FileInputStream
fs=new
FileInputStream(路径);
这是一个字符流
InputStreamReader
ir=new
InputStreamReader(
fs)
这是一个字符流
fs
为字节流
这个类就是把字节流转化为字符流;
字符流
就是为了方便读取文字和符号的
都知道中文汉字要2个字节才能存储
如果一次读出1个字节
在转化为中文
就会出乱码了
;
这些问题你都可以通过查询API文档找到答案的
用BufferedReader的这个类,其中嵌套的十一个输入流,然后用其中的readLine()方法
理论上说是不能直接得到的,因为最原始的IO流是字节流也就是说一次只能读到一个字节的数据,这里面根本就没有行数之说;此外,即使使用缓冲流最多也就是每次读进一行已,如果想要得到文件的行数就得等文件读完才知道。
字节是不存在行不行这个概念的,不过你可以每次读取固定长度
字符流可以一行一行的读取数据
代码如下:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class App {
public static void main(String[] args) throws FileNotFoundException, IOException {
try (
FileInputStream inputStream = new FileInputStream(new File("d:\\temp\\abc.txt"));
InputStreamReader streamReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(streamReader);
FileOutputStream outputStream = new FileOutputStream(new File("d:\\temp\\output.txt"));
OutputStreamWriter streamWriter = new OutputStreamWriter(outputStream);
BufferedWriter writer = new BufferedWriter(streamWriter);
) {
int count = 1;
String line = null;
while ((line = reader.readLine()) != null) {
writer.write(count++ + ": " + line);
writer.newLine();
}
}
System.out.println("done.");
}
}
可以,首先你要了解一下什么是字节流,什么是字符流。
字节流的输入输出都是以字节为基本单位的,即都是0101这样的东西。没有格式,前台和后台通过相关的约定来知道怎么转码。 而字符流是前提条件己知的就是输入输出的字符。
因为字符流是以文本字符为基础的,所以当然就有读一行文本这样的函数了。
而字节流没有文本的概念,就没有这个函数。
字节流是InputStream/outputStream, 而字节流一般是reader/writer
但是两者还是可以转换的。 如果你把一个InputSteram转成了reader ,那就可以利用reader中的readline()方法了:
请看代码:
InputStream is = XXXXXX; //你前面己经得到的inputstream 字节流
InputStreamReader reader = new InputStreamReader(is);//先转成reader
BufferedReader breader=new BufferedReader(reader); //再转成BufferedReader
String oneLine = breader.readLine();//利用reader中的readline()
System.out.println(oneLine);
请注意,前提条件必须是我前面己经说过的,这个字节流中的字节其实就是原来由文本转成字节的。比如后台是这样写的:
byte[] bytes = yourTextContent.getBytes("utf-8"); //先把文字内容转成了utf-8编码的字节数组,然后输出到客户端,所以这是字节流。但内容其实是文本。这样客户端才可以用reader来读。否则是乱码
outputStream.write(bytes);
outputStream.flush();
另外: String oneLine = breader.readLine();可以放在一个循环语句中,每次读一行,读完一行就检测一下是否读到空或文件尾, 如果是跳出循环,这样就可以读完全部的流,每次以读一行为单位。