int read(char[]b, int n) {
			int i=0, len=m, rn=n;
			while (n>0&&len==m) {
				if (remains) {
					int left=e-s;
					if (n>=left) {
						System.arraycopy(buf, s, b, i, left);
						s=0;
						remains=false;
						n-=left;
						i+=left;
					} else {
						System.arraycopy(buf, s, b, i, n);
						s+=n;
						n=0;
						i+=n;
					}
				} else {
					len=read4();
					if (n>=len) {
						System.arraycopy(buf, 0, b, i, len);
						i+=len;
						n-=len;
					} else {
						System.arraycopy(buf, 0, b, i, n);
						remains=true;
						s=n; e=len;
						i+=n;
						n=0;
					}
				}
			}
			return rn-n;
		}