java接收字节流(java如何接收字符串)
华为云服务器特价优惠火热进行中! 2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。
合作流程: |
今天给各位分享java接收字节流的知识,其中也会对java如何接收字符串进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
微信号:cloud7591如需了解更多,欢迎添加客服微信咨询。
复制微信号
本文目录一览:
- 1、java连续发送和接收几张图片字节流
- 2、Java中什么是字节流
- 3、字节流的基本操作
- 4、java字节流怎么读取数据
- 5、请教一个利用java中socket字节流进行收发时遇到的问题
- 6、java中的各种字节流之间的关系?详解
java连续发送和接收几张图片字节流
在接收端获得输入流in_stream2并在for的第一个循环中的while(in_stream2.read(b_image)0)
中全部读出来了,所以会出现你说的那个结果
具体解决办法是有很多种,可以在发送端申明一个数组,存放文件的大小一起发送给接收端,接收端的while(in_stream2.read(b_image)0)中再加以处理。

Java中什么是字节流
字节流(byte
stream)
不包含边界数据的连续流
字节流是由字节组成的,字符流是由字符组成的.
Java里字符由两个字节组成.字节流是最基本的,所有的InputStrem和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化。
字节流的基本操作
在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据时要使用输入流读取数据,而当程序需要将一些数据保存起来时,就要使用输出流。可以通过下图表示输入和输出的关系。
在java.io中流的操作主要有字节流、字符流两大类,均有输入和输出操作。字节流中输出数据主要使用OutputStream类完成,输入使用的是InputStream类。字符流中输出主要是使用Writer类完成,输入主要是使用Reader类完成。
1.字节输出流
字节流主要操作byte类型数据,以byte数组为准,主要操作类是OutputStream类和InputStream类。
OutputStream类是一个抽象类,如果要使用此类,则首先必须通过子类实例化对象。如果现在要操作的是一个文件,则可以使用FileOutputStream类,通过向上转型后,可以为OutputStream实例化。
范例: 向文件中写入字符串
程序运行结果:
内容已成功地写入到文件中,以上程序在实例化、写、关闭时都有异常发生,为了方便起见,直接在主方法上使用throws关键字抛出异常,可以减少try...catch语句。
2.追加新内容
在之前的所有操作中,如果重新执行程序,肯定会覆盖文件中的已有内容,此时可以通过FileOutputStream向文件中追加内容,FileOutputStream的另外一个构造方法如下:
如果将append的值设置为true,则表示在文件的末尾追加内容。
范例: 修改之前的程序,追加文件内容
程序运行结果
可以发现,每次执行后,内容会自动追加到文件的末尾。
3.字节输入流InputStream
既然可以用程序向文件中写入内容,那么也可以通过InputStream从文件中把内容读取进来。InputStream类和OutputStream类一样本身也是一个抽象类,必须依靠其子类。如果从文件中读取,子类肯定是FileInputStream。
FileInputStream类的构造方法如下:
范例: 从文件中读取内容
程序运行结果:
内容为:Hello World!!!Hello World!!!
文件的内容已经被读取出来,但是后面有很多个空格,这是因为开辟的byte数组大小为1024,而实际的内容只有28个字节,在这之后存在 996个空白的空间,在将byte数组变为字符串时也将这996个无用的空间转为字符串,这样不仅浪费空间,也不合理。可以使用read()方法上的返回值,此返回值表示向数组中写入了多少个数据。
范例: 修正以上错误
程序运行结果:
此时的程序已不再产生多余的空格,因为在程序最后输出时将byte数组指定范围中的内容变成了字符串。
除以上方法外,也可以通过循环从文件中一个个地把内容读取出来,直接使用read()方法即可。
范例: 使用read()通过循环读取
程序运行结果:
以上程序是在明确知道具体数组大小的前提下开展的,如果此时不知道要输入的内容有多大,则只能通过判断是否读到文件末尾的方式来读取文件。能否有根据内容大小自调整的方法?
范例: 另一种方式的读取
程序运行结果:
文件读到末尾,则返回的内容为-1。因此当temp接收到的内容为-1时,输入流的内容也读到底,才会返回-1,通过-1可以判断输入流中是否还有其他内容。
java字节流怎么读取数据
字节流读取数据例子如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 复制文件
* @author young
*
*/
public class CopyFile {
public static void main(String[] args) {
/* 指定源exe文件的存放路径 */
String str = "f:/jdk-1_5_0_06-windows-i586-p.exe";
/* 指定复制后的exe的目标路径 */
String strs = "e:/copy.exe";
/* 创建输入和输出流 */
FileInputStream fis = null;
FileOutputStream fos = null;
try {
/* 将io流和文件关联 */
fis = new FileInputStream(str);
fos = new FileOutputStream(strs);
byte[] buf = new byte[1024 * 1024];
int len;
while ((len = fis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
fis.close();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
请教一个利用java中socket字节流进行收发时遇到的问题
如果你发送一个长度11的字符串 而用一个长度为8的数组接收
第一次read没问题 但第二次read时因为只接受了3个字符 而数组长度却是8.结果就是除了前3个字符外剩下全部都是0 就出现了你的问题。
byte[] b = {0x11,0x22,0x33, 0x00, 0x00, 0x00, 0x00...}; --length = 1024 后面都是0x00
就是因为只接受了前3个字符 后边数组实例的时候本身就是0
解决方法也比较容易
read(byte[] b)方法提供了一个返回的整数用来表示接受了多少个字符。
只要每次read时判断下看看返回的数值和数组长度大小。如果接收小于数组长度在处理处理数据时把多余的数据去掉。
java中的各种字节流之间的关系?详解
字节流分为输入流和输出流。inputstream和Outputstream.里面都有各自的构造方法,一种构造方法是接收字符串路径,一种的 参数是接收file类型的对象。总之,要直到可以查看API帮助文档。在学习里面不知道都可以查找类的使用
关于java接收字节流和java如何接收字符串的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
