IO--打印流

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
/**
 * PrintStream  打印流 处理流
 */
public class PrintStreamTest {
    public static void main(String[] args) throws FileNotFoundException {
        System.out.println("TEST");

        PrintStream ps = System.out;
        ps.println(false);

        //打印到文件
        File des = new File("G:/java/test/printStream.txt");
        ps = new PrintStream(new BufferedOutputStream(new FileOutputStream(des)));
        ps.println("PrintStream is so easy...");
        ps.close();
    }
}
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.Scanner;
/**
 * 三个常量
 * 1、System.in  输入流 键盘输入
 * 2、System.out 输出流 控制台输出
 *    System.err
 * 重定向(默认:标准输入是键盘,标准输出是控制台)
 * setIn()
 * setOut()
 * setErr()
 * FileDescriptor.in    标本输入流
 * FileDescriptor.out   标本输出流
 * FileDescriptor.err
 */
public class SystemTest {
    public static void main(String[] args) throws IOException {
        testOut();
        testIn();
        testRedirect();
    }
    public static void testOut(){
        System.out.println("out");
        System.err.println("err");//跟out功能一样的,只是文本颜色是红色的
    }
    public static void testIn() throws IOException{
        InputStream is = System.in;//键盘输入
        Scanner sc = new Scanner(is);
        System.out.println("请输入:");
        System.out.println(sc.nextLine());
        is.close();
        sc.close();     
        //从文件中
        is = new BufferedInputStream(new FileInputStream("G:/java/test/PrintStream.txt"));
        sc = new Scanner(is);
        System.out.println(sc.nextLine());//print:PrintStream is so easy...
        is.close();
        sc.close();
    }
    /**
     * 重定向
     * @throws FileNotFoundException 
     */
    public static void testRedirect() throws FileNotFoundException{
        System.setOut(
                    new PrintStream(
                            new BufferedOutputStream(new FileOutputStream("G:/java/test/redirect.txt")),true));//true自助刷新
        System.out.println("a");//控制台-->>文件
        //回控制台
        System.setOut(
                    new PrintStream(
                            new BufferedOutputStream(new FileOutputStream(FileDescriptor.out)),true));
        System.out.println("back...");
    }
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
 * 封装输入
 */
public class BufferedIn {
    public static void main(String[] args) throws IOException {
        InputStream is = System.in;
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        System.out.println("请输入...");
        String msg = br.readLine();
        System.out.println(msg);
    }
}

装饰设计模式

处理流是对节点流的包装,对节点流进行装饰,使用了装饰设计模式
例如:类Amplifier对类Voice进行包装

public class Voice {
    private int voice = 10;
    public Voice() {
    }
    public int getVoice() {
        return voice;
    }
    public void setVoice(int voice) {
        this.voice = voice;
    }
    public void say(){
        System.out.println(voice);
    }
}
**
 * 扩音器
 * 类与类之间的关系
 * 1、依赖:形参或局部变量
 * 2、关联:属性
 *      聚合:属性   整体与部分   不一致的生命周期    人与手
 *      组合:属性   整体与部分   一致的生命周期     人与大脑
 * 3、继承:父子类关系
 * 4、实现:接口与实现类关系
 */
public class Amplifier {
    private Voice voice;
    public Amplifier() {
    }
    public Amplifier(Voice voice) {
        super();
        this.voice = voice;
    }
    public void say(){
        System.out.println(voice.getVoice()*1000);
    }
}
public class App {
    public static void main(String[] args) {
        Voice v = new Voice();
        v.say();
        Amplifier am = new Amplifier(v);
        am.say();
    }
}
当前提供的引用内容并未涉及 `socket.io-client` 的双面打印配置相关内容。然而,可以基于已知的 `socket.io-client` 使用场景和技术背景来探讨可能的方向。 ### 关于 Socket.IO 客户端 Socket.IO 是一种用于实现实时双向通信的技术栈,通常被应用于 Web 应用程序中的实时消息传递功能。其客户端库支持多种平台和语言环境,包括 JavaScript 和 Node.js[^3]。 #### 配置说明 对于所谓的“双面打印配置”,如果是指日志记录或调试信息输出到两个目标位置(例如控制台和文件),可以通过自定义事件监听器实现: ```javascript const io = require('socket.io-client'); const fs = require('fs'); // 创建一个写入流对象以便将日志保存至文件 const logStream = fs.createWriteStream('./log.txt', { flags: 'a' }); // 连接到服务器 const socket = io('http://localhost:3000', { reconnectionAttempts: 5, timeout: 10000, }); // 添加全局错误处理函数 socket.on('error', (err) => { console.error(`Error occurred: ${err}`); logStream.write(`Error occurred: ${err}\n`); }); // 处理连接成功事件 socket.on('connect', () => { const message = 'Connected to server'; console.log(message); logStream.write(`${message}\n`); }); ``` 上述代码片段展示了如何通过附加的日志机制完成双重输出的功能需求[^4]。 #### 日志级别管理 为了更精细地控制哪些类型的日志应该发送给不同的目的地,可考虑引入专门的日志工具包如 Winston 或 Bunyan 来替代简单的标准 I/O 流操作方式。这些框架允许开发者指定多个传输通道以及各自的过滤规则。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值