0 0

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

//代码如下,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更具备了显著优势和广阔前景。

 

 

2014年11月21日 22:48

1个答案 按时间排序 按投票排序

0 0

采纳的答案

因为你是按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);
		}
	}

2014年11月23日 17:17

相关推荐

    Java中的字节流.

    - `public void write(byte[] b, int off, int len) throws IOException`:将`len`个字节从指定的byte数组写入此输出流,从索引`off`处开始读取。 - **其他常用方法**: - `public void flush() throws ...

    浅谈Java的输入输出流

    - `void write(byte[] b, int off, int len)` 2. **Reader** 和 **Writer** - `Reader` 和 `Writer` 是基于字符流的基础类,用于处理字符数据。 - `Reader` 类提供了三个基本的方法: - `int read()` - `int ...

    浅谈Java的输入输出流.pdf

    - 主要有三个基本的方法:`read()`、`read(byte[] b)` 和 `read(byte[] b, int off, int len)`,分别用于读取单个字节、读取字节到数组以及读取指定长度的字节到数组中。 - 对于 `OutputStream` 类,提供了一组...

    java字节流和字符流[借鉴].pdf

    3. 读取指定长度的字节数组:public int read(byte[] b, int off, int len) throws IOException 以下是一个简单的示例,演示如何使用 FileInputStream 从文件读取字节数据: ```java import java.io.File; import ...

    Java语言深入文件和流

    - **write(byte[] b, int off, int len)**:指定从数组的哪个位置开始写入多少个字节。 - **close()**:关闭流。 - **flush()**:将缓冲区中的数据强制输出。 #### 四、File类详解 `File`类用于处理文件和目录的...

    java线程下载网络文件源码

    - `write(byte[] b, int off, int len)`:将指定`byte`数组中的`len`字节从偏移量`off`开始写入此文件。 #### 5. `java.io.InputStream` & `java.io.OutputStream` - **用途**:基本的输入输出流接口。 - **方法**...

    JAVA语言与编程第8章Java输入输出系统.ppt

    - `read(byte[] b, int off, int len)`:类似上一个方法,但指定读取的起始位置和最大字节数。 - `skip(long n)`:跳过指定数量的字节。 - `available()`:估计可读取的字节数。 - `close()`:关闭流,释放资源。 ...

    2021-2022年收藏的精品资料软件工程师浅谈Java的输入输出流技术步骤说明.docx

    如read(),read(byte[] b)和read(byte[] b, int off, int len),而OutputStream类则提供了写入字节的方法,如write(int b),write(byte[] b)和write(byte[] b, int off, int len)。这些方法为字节级别的数据传输提供...

    Java期末考试程序设计题

    - **方法 `write(byte[] b, int off, int len)`**: 写入字节数组的某个部分到此输出流。 - **方法 `write(byte b[])`:** 写入字节数组到此输出流。 - **方法 `write(int b)`**: 写入指定的字节。 - **方法 `close()`...

    Java:二进制方式读取文件

    - **write() 方法**:`void write(int b)`或`void write(byte[] b, int off, int len)`将指定字节数组中的数据写入此输出流。 3. **异常处理**: - **FileNotFoundException**:当试图打开不存在的文件时抛出。 ...

    初级JAVA PPT教程,适用于初级学者。忘珍惜

    1. **读取数据**:`read()`方法读取单个字节,`read(byte[] b)`和`read(byte[] b, int off, int len)`方法用于读取多个字节到指定的字节数组。 2. **定位数据**:`skip(long n)`方法跳过指定数量的字节。 3. **关闭...

    Java打印流原理及实例详解

    PrintStream类继承自OutputStream类,继承了OutputStream类的所有方法,例如write(int b)、write(byte b[])、write(byte b[], int off, int len)等方法。 PrintStream类的print()和println()方法是其特有的方法,...

    java IO输出

    它的主要方法有`write(int b)`用于写入单个字节,以及`write(byte[] b)`和`write(byte[] b, int off, int len)`用于写入字节数组的一部分或全部。 1. **字节流**: - `System.out.println()`是我们最常使用的输出...

    java 文件操作及IO流

    - `write(int b)`方法用于写入单个字节,`write(byte[] b)`和`write(byte[] b, int off, int len)`用于写入字节数组的部分或全部。 3. **字符流与转换流**: - Java中的流分为字节流和字符流,前者处理原始字节,...

    java 编写文件上传类简单易用

    int byteIndexOf (byte[] source,byte[] search,int start) byte[] subBytes(byte[] source,int from,int end) 为了便于使用,可以从这两个方法中衍生出下列方法 int byteIndexOf (byte[] source,String search...

    ewrferewrewr

    `read(byte[], off, len)`和`write(byte[], off, len)`则用于读写字节数组。 3. **FileInputStream和FileOutputStream**:这两个类分别对应于文件输入流和文件输出流,可以直接与磁盘文件关联。`FileInputStream`和...

    java代码-首先创建文件 test.txt,并把给定的数字以二进制形式写进该文件,同时输出到控制台上。 OutputStream与FileOutputStream创建文件,用write()写入数据,for循环语句组个写入数组数据,但会产生异常。

    若要写入多个字节,可以使用`write(byte[] b)`或`write(byte[] b, int off, int len)`。在这个例子中,我们要将数字以二进制形式写入,所以需要将数字转换为字节数组。可以使用`Integer.toBinaryString()`将整数转换...

    java自定义类加载器代码示例

    在findClass(String name)方法中,我们使用loadClassFile(String name)方法来加载类文件,并将其转换为byte数组,然后使用defineClass(String name, byte[] b, int off, int len)方法将byte数组转换为Class类的实例...

Global site tag (gtag.js) - Google Analytics