java中输入流&输出流&字节数组&字符之间的转换

实现InputStream的任意拷贝

ByteArrayOutputStream baos = new ByteArrayOutputStream();
 
byte[] buffer = new byte[1024];
int len;
while ((len = input.read(buffer)) > -1 ) {
    
    
    baos.write(buffer, 0, len);
}
baos.flush();
 
// 打开一个新的输入流
InputStream is1 = new ByteArrayInputStream(baos.toByteArray()); 
InputStream is2 = new ByteArrayInputStream(baos.toByteArray());

将输入流拷贝成字节数组或输出流

public class StreamUtils{
    
     // 在Spring的包下, 可以直接使用
    // 把输入流读取成字符数组
    public static byte[] copyToByteArray(@Nullable InputStream in) throws IOException {
    
    
        if (in == null) {
    
    
            return new byte[0];
        }

        ByteArrayOutputStream out = new ByteArrayOutputStream(BUFFER_SIZE);
        copy(in, out);
        return out.toByteArray();
    }

    // 把输入流拷贝到输出流
    public static int copy(InputStream in, OutputStream out) throws IOException {
    
    
        Assert.notNull(in, "No InputStream specified");
        Assert.notNull(out, "No OutputStream specified");

        int byteCount = 0;
        byte[] buffer = new byte[BUFFER_SIZE];
        int bytesRead = -1;
        while ((bytesRead = in.read(buffer)) != -1) {
    
    
            out.write(buffer, 0, bytesRead);
            byteCount += bytesRead;
        }
        out.flush();
        return byteCount;
    }
    
    // 读取输入流成字符串
	public static String copyToString(@Nullable InputStream in, Charset charset) throws IOException {
    
    
		if (in == null) {
    
    
			return "";
		}

		StringBuilder out = new StringBuilder();
		InputStreamReader reader = new InputStreamReader(in, charset);
		char[] buffer = new char[BUFFER_SIZE];
		int bytesRead = -1;
		while ((bytesRead = reader.read(buffer)) != -1) {
    
    
			out.append(buffer, 0, bytesRead);
		}
		return out.toString();
	}
	
	// 把字符串(根据编码)写到输出流
	public static void copy(String in, Charset charset, OutputStream out) throws IOException {
    
    
		Assert.notNull(in, "No input String specified");
		Assert.notNull(charset, "No charset specified");
		Assert.notNull(out, "No OutputStream specified");
		Writer writer = new OutputStreamWriter(out, charset);
		writer.write(in);
		writer.flush();
	}
}

	

写数据转成字节数组或输入流

ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
Writer writer = new OutputStreamWriter(bos, StandardCharsets.UTF_8);

Map<String, String[]> form = request.getParameterMap();
for (Iterator<String> nameIterator = form.keySet().iterator(); nameIterator.hasNext();) {
    
    
    String name = nameIterator.next();
    List<String> values = Arrays.asList(form.get(name));
    for (Iterator<String> valueIterator = values.iterator(); valueIterator.hasNext();) {
    
    
        String value = valueIterator.next();
        writer.write(URLEncoder.encode(name, FORM_CHARSET.name()));
        if (value != null) {
    
    
            writer.write('=');
            writer.write(URLEncoder.encode(value, FORM_CHARSET.name()));
            if (valueIterator.hasNext()) {
    
    
                writer.write('&');
            }
        }
    }
    if (nameIterator.hasNext()) {
    
    
        writer.append('&');
    }
}
writer.flush();

return new ByteArrayInputStream(bos.toByteArray());
}

猜你喜欢

转载自blog.csdn.net/qq_16992475/article/details/121300517