关于System.out.write(byte[] b, int off, int len)方法

问题描述

//代码如下,try块没有写。InputStream is = is = new FileInputStream("test.txt");int len;byte[] b = new byte[20];while((len = is.read(b)) != -1){System.out.write(b, 0, len);} 下面这段文字为test.txt文件的内容,Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 运行后,多数情况能输出正常,但是偶尔会有部分乱码。如下。 请问为什么?  Java是一种可以���写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言���Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

解决方案

因为你是按byte读取的,所以可能会出现字符集问题。原因是byte[20] 而你的文本包含了中文字符和数字字母,因此一个汉字可能会只读取到了其中部分你可以在while循环外创建个ByteArrayOutputStream 在while循环内拼接,最后输出。public static void main(String[] args) throws Exception {InputStream is = new FileInputStream("/Users/yz/test.txt");int len;byte[] b = new byte[20];ByteArrayOutputStream baos = new ByteArrayOutputStream();while((len = is.read(b)) != -1){baos.write(b, 0, len);}System.out.write(baos.toByteArray());}你也可以用char指定编码的方式去读取,记得设置编码。public static void main(String[] args) throws Exception {InputStream is = new FileInputStream("/Users/yz/test.txt");BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));String str = "";while((str=br.readLine())!=null){System.out.println(str);}}

时间: 2024-12-31 01:06:28

关于System.out.write(byte[] b, int off, int len)方法的相关文章

java io-java流中read(byte[] b)和read(byte[] b,int off,int len)有什么区别

问题描述 java流中read(byte[] b)和read(byte[] b,int off,int len)有什么区别 InputStream in = new FileInputStream(sourcePath); byte[] b = new byte[1024]; while (in.read(b,0,1023)!=-1) { System.out.println(new String(b)); }; 和 while (in.read(b)!=-1) { System.out.pri

为什么link中byte可以转换为int,int不能转换为byte?

问题描述 为什么link中byte可以转换为int,int不能转换为byte? 为什么link中byte可以转换为int,int不能转换为byte? 解决方案 为什么杯子中的水可以倒在脸盆里,为什么脸盆里的水不能倒在杯子里? 解决方案二: 可以强制转换,但转换后的结果可想而知: 如果 int 的数值在 byte 类型取值范围之内,结果还是一样的. 否则,数值被截取.按 C 语言的规则,取 int 的低字节数值赋值到 byte.

outputstream-inputstream.read(byte[] b,int off,int len)和write读写硬盘次数?

问题描述 inputstream.read(byte[] b,int off,int len)和write读写硬盘次数? java中inputstream.read(byte[] b,int off,int len)和write读写硬盘次数, 每次调用inputstream.read(byte[] b,int off,int len)是访问硬盘一次吗,还是访问硬盘len次? 如果只是访问一次,byte[]的长度.len等于BufferedInputStream的缓冲区的大小,那么inputstr

java-生命的游戏neighborCount(int row, int col)问题

问题描述 生命的游戏neighborCount(int row, int col)问题 求大神告知neighborCount还有哪里不对呢? public class GameOfLife { private String[][] Society; private int Rows; private int Columns; public GameOfLife(int rows, int cols) { Society = new String[rows][cols]; Rows = Socie

vs2012解析不出using,只解析出System.IO.File这种形式,有什么解决方法没?

问题描述 vs2012解析不出using,只解析出System.IO.File这种形式,有什么解决方法没? vs2012解析不出using,只解析出System.IO.File这种形式,有什么解决方法没? 解决方案 检查下程序集有没有引用,程序集有没有冲突. 什么类型解析不了. 忽略IDE的提示,编译本身有没有问题? 解决方案二: 可以在代码段最前面加using System; 解决方案三: 例如这个,我添加引用之后就变成了 而不是using的形式

public int getKeyCode(int gameAction) 与 public int getGameAction(int keyCode)的区别

区别 一个MIDlet应用程序通过调用Canvas方法来探测哪些键盘代码映射到运行的应用程序中的抽象游戏动作:public static int getGameAction(int keyCode); Canvas类定义抽象游戏动作集:UP.DOWN.LEFT.RIGHT.FIRE等等. 游戏开发者应该知道MIDP 1.0规范中的一个问题.这个类定义了转化键盘代码到游戏动作的方法,同样也定义了转化游戏动作到键盘代码的方法.public int getGameAction(int keyCode)

Unix编程之int fstat(int fildes,struct stat *buf);

/* * fstat(由文件描述词取得文件状态) * 相关函数 stat,lstat,chmod,chown,readlink,utime * 表头文件 * #include<sys/stat.h> * #include<unistd.h> * 定义函数 * int fstat(int fildes,struct stat *buf); * 函数说明 fstat()用来将参数fildes所指的文件状态,复制到参数buf所指的 结构中(struct stat). * Fstat()与

link中convert.toint32 int.parse int.tryparse的区别和利弊

问题描述 link中convert.toint32 int.parse int.tryparse的区别和利弊 link中convert.toint32 int.parse int.tryparse的区别和利弊各式什么? 解决方案 convert.toint32在LINQ中是桩函数,桩函数会被linq provider识别并且转换成sql,而parse/tryparse不是.所以不要使用后者. 解决方案二: 是 .Net/LINK 吧. tryparse 返回成功/失败不抛出错误,用在明确要检查能

ios oc-oc ??怎么理解这个表达式 int (^func()) (int)

问题描述 oc ??怎么理解这个表达式 int (^func()) (int) int (^func()) (int){ retutn ^(int count) {return count + 1;};} 解决方案 这个函数的返回值是一个函数(这个函数没有参数,返回值int).函数体定义了一个函数,并且把它作为结果返回.

iostream-为什么我没有对int操作 int值自己变化啊

问题描述 为什么我没有对int操作 int值自己变化啊 #include#include#include using namespace std; int main(){ ifstream infile(""1.txt""); char ch[2]; int counter=0; cout< cout while(infile>>ch){ cout<<ch; } cout<<endl; cout<<counter