java圖片位元組流
1. java文件位元組流和字元流最好兩個版本
其實就是位元組與字元的區別。file****stream不能正確的將位元組轉換為字元。 你不需要糾結原因,這是java 1.0的io設計問題。在java編程思想這本書裡面有解釋。 你只需要記住一點:讀取的時候用filereader去讀。 純手打,請採納。
2. Java把一個字元流轉換成位元組流,除了字元本身,還需要什麼參數
不知道你的問題是寫反了,還是故意這么問的。
Java只提供了將位元組流轉為字元流的方法,並沒有字元流轉為位元組流的方法。
因為位元組流是一個通用的流,可以傳輸各種類型的資源,比如:文本、圖片、音頻等...
而字元流是一個特殊的流,只能傳輸文本類型的資源,但是它比位元組流傳輸文本的方式更加方便、快捷。
所以,有些場景需要將位元組流轉為更加方便快捷的字元流來處理;但沒有場景需要將字元流轉為位元組流,這個很好理解,如果是文本類型,字元流更高效,不需要轉為位元組流,如果是其它類型,字元流根本就用不了,也不存在轉換一說。
如果你想問的是位元組流轉為字元流的方法,那麼可以使用
轉換專屬流:(將位元組流轉換成字元流)
java.io.InputStreamReader
java.io.OutputStreamWriter
該類的構造方法是4個重載方法,參數可以是字元流對象
或者是字元流對象+字元集名稱/字元集對象/字元集解碼器對象
public InputStreamReader(InputStream in) {}
public InputStreamReader(InputStream in, String charsetName)
throws UnsupportedEncodingException
{}
public InputStreamReader(InputStream in, Charset cs) {}
public InputStreamReader(InputStream in, CharsetDecoder dec) {}
3. java 位元組流和字元流的處理問題
InputStream 和OutputStream,兩個是為位元組流設計的,主要用來處理位元組或二進制對象,
2. Reader和 Writer.兩個是為字元流(一個字元占兩個位元組)設計的,主要用來處理字元或字元串.
字元流處理的單元為2個位元組的Unicode字元,分別操作字元、字元數組或字元串,而位元組流處理單元為1個位元組,操作位元組和位元組數組。所以字元流是由Java虛擬機將位元組轉化為2個位元組的Unicode字元為單位的字元而成的,所以它對多國語言支持性比較好!如果是音頻文件、圖片、歌曲,就用位元組流好點,如果是關繫到中文(文本)的,用字元流好點
所有文件的儲存是都是位元組(byte)的儲存,在磁碟上保留的並不是文件的字元而是先把字元編碼成位元組,再儲存這些位元組到磁碟。在讀取文件(特別是文本文件)時,也是一個位元組一個位元組地讀取以形成位元組序列
1,位元組流可用於任何類型的對象,包括二進制對象,而字元流只能處理字元或者字元串;
2,位元組流提供了處理任何類型的IO操作的功能,但它不能直接處理Unicode字元,而字元流就可以
位元組流是最基本的,所有的InputStrem和OutputStream的子類都是,主要用在處理二進制數據,它是按位元組來處理的 但實際中很多的數據是文本,又提出了字元流的概念,它是按虛擬機的encode來處理,也就是要進行字元集的轉化 這兩個之間通過 InputStreamReader,OutputStreamWriter來關聯,實際上是通過byte[]和String來關聯 在實際開發中出現的漢字問題實際上都是在字元流和位元組流之間轉化不統一而造成的.
4. 求教java webservice 上傳圖片位元組流問題。
base64是把二進制轉為字元串用的。
圖片是二進制流,轉為字元串沒有任何意義,應該和base64無關。
上傳失敗抱的錯誤信息是什麼,沒有錯誤信息無從分析。
5. JAVA 位元組流和字元流度讀寫的區別
關於位元組流,就是用來讀取位元組文件的文件流形式,一般用於讀取類似於圖片,音樂,壓縮文件等,並不是由一個一個得中文或英文之類的標准文字字元字元組成的文件,在讀取的時候,需要一個一個byte的去讀取。而字元流則可以讀取例如txt文檔這一類的,由標準的中英文字元或其他標准語言組成的文件,這一類文件可以直接按照char字元的大小為單位進行讀取。
6. java連續發送和接收幾張圖片位元組流
在接收端獲得輸入流in_stream2並在for的第一個循環中的while(in_stream2.read(b_image)>0)
中全部讀出來了,所以會出現你說的那個結果
具體解決辦法是有很多種,可以在發送端申明一個數組,存放文件的大小一起發送給接收端,接收端的while(in_stream2.read(b_image)>0)中再加以處理。
7. 怎樣在linux環境下使用java調用C++動態鏈接庫時將圖片位元組流傳到C++方法的void*參數中(使用的JNA)
的(在WINDOWS平台上是DLL文件形式,在UNIX機器上是SO文件形式)。
如下是詳細講解:
1、JAVA中所需要做的工作
在JAVA程序中,首先需要在類中聲明所調用的庫名稱,如下:
static {
System.loadLibrary(「goodluck」);
}
在這里,庫的擴展名字可以不用寫出來,究竟是DLL還是SO,由系統自己判斷。
還需要對將要調用的方法做本地聲明,關鍵字為native。並且只需要聲明,而不需要具體實現。如下:
public native static void set(int i);
public native static int get();
然後編譯該JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就會生成C/C++的頭文件。
例如程序TestDll.java,內容為:
public class TestDll
{
static
{
System.loadLibrary("goodluck");
}
public native static int get();
public native static void set(int i);
public static void main(String[] args)
{
TestDll test = new TestDll();
test.set(10);
System.out.println(test.get());
}
}
用javac TestDll.java編譯它,會生成TestDll.class。
再用javah TestDll,則會在當前目錄下生成TestDll.h文件,這個文件需要被C/C++程序調用來生成所需的庫文件。
2、C/C++中所需要做的工作
對於已生成的.h頭文件,C/C++所需要做的,就是把它的各個方法具體的實現。然後編譯連接成庫文件即可。再把庫文件拷貝到JAVA程序的路徑下面,就可以用JAVA調用C/C++所實現的功能了。
接上例子。我們先看一下TestDll.h文件的內容:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class TestDll */
#ifndef _Included_TestDll
#define _Included_TestDll
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jint JNICALL Java_TestDll_get (JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_TestDll_set (JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
在具體實現的時候,我們只關心兩個函數原型
JNIEXPORT jint JNICALL Java_TestDll_get (JNIEnv *, jclass);
和
JNIEXPORT void JNICALL Java_TestDll_set (JNIEnv *, jclass, jint);
這里JNIEXPORT和JNICALL都是JNI的關鍵字,表示此函數是要被JNI調用的。而jint是以JNI為中介使JAVA的int類型與本地的int溝通的一種類型,我們可以視而不見,就當做int使用。函數的名稱是JAVA_再加上java程序的package路徑再加函數名組成的。參數中,我們也只需要關心在JAVA程序中存在的參數,至於JNIEnv*和jclass我們一般沒有必要去碰它。
下面我們用TestDll.cpp文件具體實現這兩個函數:
#include "TestDll.h"
int i = 0;
JNIEXPORT jint JNICALL Java_TestDll_get (JNIEnv *, jclass)
{
return i;
}
JNIEXPORT void JNICALL Java_TestDll_set (JNIEnv *, jclass, jint j)
{
i = j;
}
編譯連接成庫文件,本例是在WINDOWS下做的,生成的是DLL文件。並且名稱要與JAVA中需要調用的一致,這里就是goodluck.dll
把goodluck.dll拷貝到TestDll.class的目錄下,java TestDll運行它,就可以觀察到結果了。
3、你想保存一個"\sample\myfile.txt"到變數str中,原本就要寫成
8. Java中字元流和位元組流都是用在什麼地方(不要傳統解釋,用自己的意思說出來)
位元組流:這個底層用得最多
1、網路傳輸:基本傳輸的都是位元組(如HTTP傳輸、或你調別人的介面(用AES加密)等)
2、讀取本地非文本文件:如要讀取 一張圖片,這時肯定只能用 位元組流
字元流:
1、這種最常用於讀本地的 文本文件,如讀一個 .java、.txt文件等
9. java中位元組流讀寫和字元流讀寫怎麼理解
位元組流與字元流主要的區別是他們的的處理方式
位元組流是最基本的,所有的InputStream和OutputStream的子類都是,主要用在處理二進制數據,它是按位元組來處理的
但實際中很多的數據是文本,又提出了字元流的概念,它是按虛擬機的encode來處理,也就是要進行字元集的轉化
這兩個之間通過 InputStreamReader,OutputStreamWriter來關聯,實際上是通過byte[]和String來關聯
在實際開發中出現的漢字問題實際上都是在字元流和位元組流之間轉化不統一而造成的
在從位元組流轉化為字元流時,實際上就是byte[]轉化為String時,
public String(byte bytes[], String charsetName)
有一個關鍵的參數字元集編碼,通常我們都省略了,那系統就用操作系統的lang
而在字元流轉化為位元組流時,實際上是String轉化為byte[]時,
byte[] String.getBytes(String charsetName)
也是一樣的道理
10. JAVA中的字元流和位元組流。位元組流我能理解,就是系統內部對數據以二進制方式存儲,那字元流什麼意思
字元流是為字元設計的,對位元組流進行包裝
因為一個字元有可能佔用多個位元組的
例如UTF-8編碼下,對中文漢字的長度是變長的(2-4個位元組),各種編碼長度都不一樣
那如果你用位元組流讀取的話,那你還要去一個個的轉換,這中間就很多問題了
因此就有了字元流,幫你完成了一系列的位元組轉換...
純手工的,請採納哈.