從OutputStream轉String

一、InputStream轉Map

我們在處理請求體時,會將請求體讀取成InputStream流,這時我們經常需要將流轉成Map,這裡就以HttpServletRequest的過濾器為例。

public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    // 將inputStream轉成Map
    Map<String, String> paramMap = getParameterMap(request.getInputStream(),
                request.getContentType());
    // do something
    chain.doFilter(req, res);
}

/**
* 將InputStream轉成Map
* 
* @param inputStream
*            請求流
* @param contentType
*            Content-Type
* @return Map 對象
* @throws UnsupportedEncodingException
* @throws IOException
*/
@SuppressWarnings("rawtypes")
private Map<String, String> getParameterMap(InputStream inputStream,
            String contentType) throws UnsupportedEncodingException, IOException {
    Map<String, String> paramMap = new HashMap<String, String>();
    if (contentType != null && contentType.contains("multipart/form-data")) {
        DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
        ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
        try {
            List fileItems = servletFileUpload.parseRequest(new ServletRequestContext(request));
            Iterator it = fileItems.iterator();
            while (it.hasNext()) {
                FileItem fileItem = (FileItem) it.next();
                if (fileItem.isFormField()) {
                    paramMap.put(fileItem.getFieldName(), fileItem.getString());
                }
            }

        } catch (FileUploadException e) {
            LOG.error("Get parameter map failed! ", e);
        }
    } else {
        byte[] body = IOUtils.readFully(inputStream, -1, false);
        paramMap = JsonParserUtils.toMap(new String(body, "UTF-8"));
    }

    return paramMap;
}

二、OutputStream轉文件

將OutputStream轉成文件在日常開發中是十分常見的需求,這裡給出一個方法實現。

/**
* 將OutputStream流寫入文件
* 
* @param outputStream
*            源流
* @param filePath
*            目標文件路徑
* @throws IOException
*/
public static void outputStreamToFile(OutputStream outputStream, String filePath)
            throws IOException {
    byte[] buffer = new byte[1024];
    int len;
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(filePath);
        while ((len = outputStream.read(buffer)) != -1) {
            fos.write(buffer, 0, len);
        }
        fos.flush();
    } finally {
        if (fos != null) {
            fos.close();
        }
    }
}

三、OutputStream編碼

在將OutputStream轉成String時,要注意編碼格式,否則可能會出現亂碼的情況。

OutputStream outputStream = new ByteArrayOutputStream();
try {
    outputStream.write("你好".getBytes("UTF-8"));
} catch (IOException e) {
    e.printStackTrace();
}

String result = outputStream.toString("UTF-8");
System.out.println(result);

四、OutputStream用法

OutputStream一般是作為寫入數據的流,默認將數據寫入到流中,然後再從流中讀取到另一段進行處理。

// 文件流
OutputStream outputStream = new FileOutputStream(new File("output.txt"));

// 網絡流
OutputStream outputStream = socket.getOutputStream();

五、OutputStream用於

OutputStream主要用於將數據寫入到指定的流中,常見的有文件流和網絡流。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/241216.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:26
下一篇 2024-12-12 12:26

相關推薦

  • c# enum轉換成string

    本文將從以下幾個方面詳細闡述c#中enum類型轉換成string類型的方法及注意事項。 一、基本語法和示例 c#中的enum類型可以看作是一組有名字的常量值,通常用於定義一組相關的…

    編程 2025-04-29
  • JWT String Argument Cannot Be Null or Empty

    JWT(JSON Web Token)是一種用於進行身份驗證的標準。在使用JWT時,經常會遇到“JWT String Argument Cannot Be Null or Empt…

    編程 2025-04-27
  • Python中String包含的進階應用

    對於Python程序員而言,String類型的操作是日常工作中必不可少的一部分。String包含的操作很多,其中最基礎的操作就是判斷一個字符串是否包含另一個字符串。本篇文章將對Py…

    編程 2025-04-27
  • byte字符串轉string解析

    本文將會從以下幾個方面對byte字符串轉string做詳細的闡述: 概述 轉換方式 實際應用 代碼實現 一、概述 字符串是編程中最常用的一種數據類型。但是,在編程中,我們經常會碰到…

    編程 2025-04-25
  • 深入探討string類型的默認值

    一、string類型的默認值簡介 在C++和許多其他編程語言中,string是一種表示字符串的數據類型。它們可以存儲一個或多個字符,可以進行比較、連接和操作。string類型在聲明…

    編程 2025-04-25
  • 如何將char轉換為string

    一、char和string的區別 在開始講述如何將char轉換為string前,我們需要了解char和string的區別。char是C++語言的一種基礎數據類型,用於表示單個字符,…

    編程 2025-04-24
  • C語言string.h中函數的詳細介紹

    一、strcpy函數 strcpy函數是C語言中常用的字符串拷貝函數,其原型為: char *strcpy(char *dest, const char *src); 該函數的作用…

    編程 2025-04-23
  • Java String Reverse詳解

    一、什麼是Java String Reverse 在描述Java String Reverse之前,我們需要先了解什麼是字符串翻轉。在計算機科學中,字符串翻轉是指將字符串中的字符順…

    編程 2025-04-23
  • 深度了解string類型長度

    string類型是一種非常常用的數據類型,它在許多編程語言中都有廣泛的應用。它可以表示任意長度的文本,例如字符串、HTML代碼、JSON數據等等。在這篇文章中,我們將從多個方面深度…

    編程 2025-04-23
  • Java String.Join——集合轉字符串的利器

    一、基本介紹 Java String.Join是Java8中一個非常實用的靜態方法,它的作用是將一個集合或數組轉換成一個字符串。 通常我們需要將一組數據以特殊的分隔符連接在一起,例…

    編程 2025-04-18

發表回復

登錄後才能評論