java-裝飾流-轉換流
阿新 • • 發佈:2018-11-09
InputStreamReader &OutputStreamWriter
InputStreamReader
是字元流和位元組流之間的橋樑,可以將位元組流轉換為字元流,並且能為位元組流指定字符集,可以處理一個個的字元。
1.以字元流的形式操作位元組流
package cn.lesson.Burrfed;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java. io.OutputStreamWriter;
/**
* 轉換流
* 1.以字元流的形式操作位元組流(純文字的)
* 2.指定字符集
* @author MacBook
*
*/
public class ConverTest {
public static void main(String[] args) {
// 操作System.in 和System.out
try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out))){
//迴圈獲取鍵盤的輸入(exit退出),輸出此內容。
String mag="";
while(!mag.equals("exit")) {
mag = reader.readLine();//逐行讀取
writer.write(mag);//迴圈寫出
writer.newLine();
writer.flush();//強制重新整理
}
}catch(IOException e){
System.out.println("操作異常!" );
}
}
}
2.操作網路流
package cn.lesson.Burrfed;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
/**
* 轉換流 - 操作網路流
* @author MacBook
*
*/
public class ConverTest03 {
public static void main(String[] args) {
// 操作網路流 下載百度的原始碼
//選擇流
try(BufferedReader reader =
new BufferedReader(
new InputStreamReader(
new URL("http://www.baidu.com").openStream(),"utf-8"))){
String msg;
while((msg = reader.readLine())!=null){
System.out.println(msg);//如果這裡出現亂碼就是字符集不統一
}
}catch(IOException e) {
System.out.println("操作異常!");
}
}
/**
* 方法一 ,有亂碼,由於位元組數不夠出現亂碼
*/
public static void test01(){
//選擇流
try(InputStream is = new URL("http://www.baidu.com").openStream()){
//操作:讀取
int temp;
while((temp = is.read())!=-1) {
System.out.print((char)temp);
}
}catch(IOException e) {
System.out.println("操作異常!");
}
}
/**
* 方法二、轉換為字元流,沒有亂碼
*/
public static void test02() {
//選擇流
try(InputStreamReader is = new InputStreamReader(new URL("http://www.baidu.com").openStream(),"utf-8")){
//操作:讀取
int temp;
while((temp = is.read())!=-1) {
System.out.print((char)temp);
}
}catch(IOException e) {
System.out.println("操作異常!");
}
}
}
3.兩個轉換流一起用
package cn.lesson.Burrfed;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
/**
* 轉換流 - 操作網路流
* @author MacBook
*
*/
public class ConverTest03 {
public static void main(String[] args) {
// 操作網路流 下載百度的原始碼
//選擇流
try(BufferedReader reader =
new BufferedReader(
new InputStreamReader(
new URL("http://www.baidu.com").openStream(),"utf-8"));
BufferedWriter writer =
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("baidu.html")))){
String msg;
while((msg = reader.readLine())!=null){
writer.write(msg);
writer.newLine();
}
writer.flush();
}catch(IOException e) {
System.out.println("操作異常!");
}
}
}