Java 字節流讀取文件
try (FileInputStream fis = new FileInputStream("test.java")) {
byte[] buf = new byte[1024];
int len;
while ((len = fis.read(buf)) > 0) {
System.out.println(new String(buf, 0, len));
}
}
Java 字符流讀取文件
try (FileReader fr = new FileReader("test.java")) {
char[] buf = new char[32];
int len;
while ((len = fr.read(buf)) > 0) {
System.out.println(new String(buf, 0, len));
}
}
C# Stream 與 byte[] 互轉
// Stream → byte[]
public byte[] StreamToBytes(Stream stream) {
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
stream.Seek(0, SeekOrigin.Begin); // 重置位置
return bytes;
}
// byte[] → Stream
public Stream BytesToStream(byte[] bytes) {
return new MemoryStream(bytes);
}
C# Stream 與文件互轉
// Stream → 文件
public void StreamToFile(Stream stream, string fileName) {
byte[] bytes = StreamToBytes(stream);
File.WriteAllBytes(fileName, bytes);
}
// 文件 → Stream
public Stream FileToStream(string fileName) {
byte[] bytes = File.ReadAllBytes(fileName);
return new MemoryStream(bytes);
}
核心差異對比
| 特性 | Java | C# |
| 基礎抽象 | InputStream/OutputStream | Stream (抽象基類) |
| 字符流 | Reader/Writer 獨立體系 | StreamReader/StreamWriter 裝飾 Stream |
| 資源管理 | try-with-resources (Java 7+) | using 語句 / IDisposable |
| 內存流 | ByteArrayInputStream/OutputStream | MemoryStream |
| 緩衝 | BufferedInputStream/OutputStream | BufferedStream / BinaryReader/Writer |
最佳實踐共性
- 優先使用緩衝流提升性能
- 指定字符集(UTF-8)避免亂碼
- 及時關閉流,釋放文件句柄
- 大文件分塊讀寫,避免 OOM