昨天看了段视频,突然发现自己对inputstream的read方法和outputstream的write方法在使用上还是不是很明白,早上来做了个测试,具体情况如下:
第一个例子写法如下:
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("e:/linux.txt");
FileOutputStream fos = new FileOutputStream("e:/test.txt");
byte[] b = new byte[1024];
int i = 0;
try {
while (fis.read(b) != -1) {
fos.write(b);
i++;
System.out.println("第" + i + "次输出:" + new String(b).toString());
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
fis.read(b)方法会每次在fis中读取b.length个长度的字符到b中,然后用fos.write(b)方法将b中的内容写入到fos流中;测试结果是,发现e:/test.txt文件中的内容与e:/linux.txt中的内容大部分是相同的,只有最后结尾的时候多出了一些乱码,这些乱码是哪儿来的呢?后来又写了下面的一个例子:
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("e:/linux.txt");
FileOutputStream fos = new FileOutputStream("e:/test.txt");
byte[] b = new byte[1024];
try {
int length = 0;
while ((length = fis.read(b)) != -1) {
System.out.println(length);
fos.write(b, 0, length);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
运行结果显示:e:/test.txt文件中的内容与e:/linux.txt中的内容完全相同;后来对比了两种写法,发现第一种写法是有问题的,问题在于,如果读取的内容没有1024个字节,则写入到fos中还是以1024字节写入的,后面多余的是一些垃圾字节(不知道是什么数据)也会写入。
分享到:
相关推荐
- `FileInputStream`/`FileOutputStream` - `DataInputStream`/`DataOutputStream` - **过滤流**(Filter Streams):包装另一个流,并在传递给该流之前增加额外的功能。 - `BufferedInputStream`/`...
- **FileInputStream/FileOutputStream** - 这是最基础的文件读写方式之一,适用于处理字节流。 - 优点:简单易用,适用于大多数情况。 - 缺点:功能相对有限,不支持缓冲或字符编码转换等功能。 - **...
- 文件操作:File类的常用方法,以及FileReader/Writer、FileInputStream/FileOutputStream的使用。 - NIO(New IO):非阻塞I/O,通道(Channel)、缓冲区(Buffer)和选择器(Selector)的概念。 5. **反射机制...
- 文件操作:掌握File类和FileInputStream/FileOutputStream的使用。 7. **反射API**: - 类的加载与实例化:通过Class对象动态获取类信息并创建对象。 - 获取类成员:获取字段、方法和构造器并进行调用。 - ...
- 文件操作:掌握File类和FileInputStream/FileOutputStream的用法。 - NIO:介绍非阻塞I/O模型和相关类的使用。 8. **反射** - 类加载机制:理解类加载的过程和双亲委派模型。 - 动态代理:探讨动态代理在AOP...
2. 字节流:包括InputStream和OutputStream代表字节输入流和字节输出流,如FileInputStream和FileOutputStream用于文件操作。还有FilterInputStream和FilterOutputStream作为装饰者模式的实现,提供数据过滤和转换...
- 文件流(FileInputStream/FileOutputStream)的使用。 - 字节流与字符流的区别。 - BufferedInputStream/BufferedReader提高读取效率的方法。 - 对象流(ObjectInputStream/ObjectOutputStream)的使用场景。 ###...
3. **流的层次结构**:掌握InputStream、OutputStream、Reader、Writer这四个基类,以及它们的子类如FileInputStream、FileOutputStream、 FileReader、FileWriter等。 4. **缓冲流**:了解BufferedInputStream、...
它可以自动处理字符编码转换,并且通常用于写入文本文件。 ```java FileWriter writer = new FileWriter("path/to/file"); writer.write("Hello, world!"); writer.close(); ``` ##### 性能对比分析 - **`...
例如,FileInputStream和FileOutputStream用于文件操作,BufferedReader和PrintWriter用于文本处理,SocketInputStream和SocketOutputStream则服务于网络通信。 Java NIO则在Java 1.4版本中引入,提供了一种非阻塞...
4. **输入输出流**:FileInputStream、FileOutputStream、BufferedReader、PrintWriter等。 5. **多线程**:Thread类和Runnable接口,同步机制(synchronized关键字,wait/notify机制)。 6. **IO与NIO**:对比传统...
- 文件操作:File类的使用,FileInputStream和FileOutputStream进行文件读写。 - 缓冲流:BufferedReader和BufferedWriter提高读写效率。 - 转换流:InputStreamReader和OutputStreamWriter在字节流和字符流间...
以下是关于这三者之间相互转化的方法及对比: 1. **String -> InputStream** 将一个String转化为InputStream,主要是将字符串转换成字节数组,然后创建一个ByteArrayInputStream。这种方法简单快捷,但会占用一定...
6. **输入/输出流**:学会使用System.in进行标准输入,FileInputStream和FileOutputStream进行文件读写,以及BufferedReader和PrintWriter等高级I/O操作。 7. **泛型**:理解泛型的概念,如何在类、接口、方法中...
5. **输入/输出流**:Java的I/O流系统用于读写文件、网络通信等,如FileInputStream、FileOutputStream、BufferedReader、PrintWriter等类。 6. **多线程**:Java内置了对多线程的支持,包括Thread类、Runnable接口...
- 文件操作:File类的使用,FileInputStream、FileOutputStream等流的读写。 - NIO(New IO):了解通道、缓冲区的概念,以及非阻塞I/O的优势。 8. **反射**: - Class类:获取类信息,动态创建对象,调用方法。...
Java的I/O流模型支持对文件的读写操作,如FileInputStream和FileOutputStream。此外,NIO(New Input/Output)提供非阻塞I/O操作,提高了文件操作的效率。 6. **数据库操作**: JDBC(Java Database Connectivity...
5. **IO流**:理解流的分类(字节流、字符流)、流向(输入流、输出流),熟悉BufferedReader、BufferedWriter、FileInputStream、FileOutputStream等常用流对象。 **二、Web基础** 1. **HTTP协议**:掌握HTTP的...