一个想法:在Java中屏蔽IO操作细节

我记得有段时间学clojure的IO操作的时候,他没有暴露出操作细节,比如

char [] buffer = new char[1024];
int length = in.read(buffer,0,1024);
while(length != -1) {
    out.write(buffer,0,1024);
    lenght = in.read(buffer,0,1024);
}
out.flush();

而是直接

(require '[clojure.java.io :as io])
(io/copy in out)

这里in: input-stream,reader,(也可以是File)
这里out: output-stream,writer,(也可以是File)
总的来说,这是一个读取数据,再写入数据的过程,他可以概括一部分IO操作,包括网络通信
于是我有了在Java中实现这个io/copy的想法

import java.io.*;
import static java.lang.System.out;

class FileProxy {
    // Copy(in,out)
    // Copy(in,out,buffer-size)
    static int buffer_size=1024;
    static void Copy(InputStream in,OutputStream out) throws IOException {
	byte [] buffer = new byte[buffer_size];
	int length = in.read(buffer,0,buffer_size);
	while(length != -1) {
	    out.write(buffer,0,length);
	    length = in.read(buffer,0,buffer_size);
	}

	out.flush();
    }
    static void Copy(InputStream in,OutputStream out,int __buffer_size) throws IOException {
	byte [] buffer = new byte[__buffer_size];
	int length = in.read(buffer,0,buffer_size);
	while(length != -1) {
	    out.write(buffer,0,length);
	    length = in.read(buffer,0,length);
	}

	out.flush();
    }

    static void Copy(Reader in,Writer out) throws IOException {
	char [] buffer = new char[buffer_size];
	int length = in.read(buffer,0,buffer_size);
	while(length != -1) {
	    out.write(buffer,0,length);
	    length = in.read(buffer,0,buffer_size);
	}

	out.flush();
    }

    static void Copy(Reader in,Writer out,int __buffer_size) throws IOException {
	char [] buffer = new char[__buffer_size];
	int length = in.read(buffer,0,buffer_size);
	while(length != -1) {
	    out.write(buffer,0,length);
	    length = in.read(buffer,0,buffer_size);
	}

	out.flush();
    }
    
}

谢谢提醒 :joy:

我学emacs的时候是没有网线的

你可以试着把网线拔掉 会进步很大的

好的,有大问题我再来咨询 :kissing_closed_eyes:

不过你的签名是怎么回事

完整的签名是:

我现在觉得emacs什么都做的哲学有问题

什么都做的结果就是什么都做不好

比速度不如vim 比美观不如vscode

我应该专心的做好一件事情了

用vim写代码 用vscode做笔记 和windows讲和 多学点C++和算法 放下我的固执和愚蠢 带上好奇与天真 出发吧

我觉得你应该学scala

把网线拔掉这个不行吧,我学emacs的时候也是没有网线,还专门跑去网吧上网

所以呢?你学的怎么样?

给你出个题:

你能做到哪一步?

Emacs 什么都做的哲学是没有问题的,但是做为用户什么都想用 Emacs 做的哲学(主要指去做一些原本不会去做,但是听说 Emacs 能做才去做的事)是绝对有问题的。

@zhouchongzxc
学艺不精,我基本不用yasnippet,对于常用代码片段,直接用elisp的 insert indent-for-tab-command等写成elisp函数,然后绑定hydra快捷键调用或m-x,也许不是个好办法

yasnippet的创建成本很低。

我也不用 只是看不惯而已