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个字节),各种编码长度都不一样
那如果你用字节流读取的话,那你还要去一个个的转换,这中间就很多问题了
因此就有了字符流,帮你完成了一系列的字节转换...
纯手工的,请采纳哈.