java 流与 byte[] 的互转操作

2025-05-29 0 23

1. InputStream -> byte[]

引入 apache.commons.is 包

import org.apache.commons.io.IOUtils;

byte[] bytes = IOUtils.toByteArray(inputStream);

2. byte[] -> InputStream

InputStream inputStream = new ByteArrayInputStream(bytes);

补充知识:byte[]与各种数据类型互相转换示例

在socket开发过程中,通常需要将一些具体的值(这些值可能是各种JAVA类型)转化为byte[]类型,为此我总结了如下这个示例,贴出来,以便经常翻看

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235
public class TestCase {

/**

* short到字节数组的转换.

*/

public static byte[] shortToByte(short number) {

int temp = number;

byte[] b = new byte[2];

for (int i = 0; i < b.length; i++) {

b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位

temp = temp >> 8;// 向右移8位

}

return b;

}

/**

* 字节数组到short的转换.

*/

public static short byteToShort(byte[] b) {

short s = 0;

short s0 = (short) (b[0] & 0xff);// 最低位

short s1 = (short) (b[1] & 0xff);

s1 <<= 8;

s = (short) (s0 | s1);

return s;

}

/**

* int到字节数组的转换.

*/

public static byte[] intToByte(int number) {

int temp = number;

byte[] b = new byte[4];

for (int i = 0; i < b.length; i++) {

b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位

temp = temp >> 8;// 向右移8位

}

return b;

}

/**

* 字节数组到int的转换.

*/

public static int byteToInt(byte[] b) {

int s = 0;

int s0 = b[0] & 0xff;// 最低位

int s1 = b[1] & 0xff;

int s2 = b[2] & 0xff;

int s3 = b[3] & 0xff;

s3 <<= 24;

s2 <<= 16;

s1 <<= 8;

s = s0 | s1 | s2 | s3;

return s;

}

/**

* long类型转成byte数组

*/

public static byte[] longToByte(long number) {

long temp = number;

byte[] b = new byte[8];

for (int i = 0; i < b.length; i++) {

b[i] = new Long(temp & 0xff).byteValue();// 将最低位保存在最低位 temp = temp

// >> 8;// 向右移8位

}

return b;

}

/**

* 字节数组到long的转换.

*/

public static long byteToLong(byte[] b) {

long s = 0;

long s0 = b[0] & 0xff;// 最低位

long s1 = b[1] & 0xff;

long s2 = b[2] & 0xff;

long s3 = b[3] & 0xff;

long s4 = b[4] & 0xff;// 最低位

long s5 = b[5] & 0xff;

long s6 = b[6] & 0xff;

long s7 = b[7] & 0xff;

// s0不变

s1 <<= 8;

s2 <<= 16;

s3 <<= 24;

s4 <<= 8 * 4;

s5 <<= 8 * 5;

s6 <<= 8 * 6;

s7 <<= 8 * 7;

s = s0 | s1 | s2 | s3 | s4 | s5 | s6 | s7;

return s;

}

/**

* double到字节数组的转换.

*/

public static byte[] doubleToByte(double num) {

byte[] b = new byte[8];

long l = Double.doubleToLongBits(num);

for (int i = 0; i < 8; i++) {

b[i] = new Long(l).byteValue();

l = l >> 8;

}

return b;

}

/**

* 字节数组到double的转换.

*/

public static double getDouble(byte[] b) {

long m;

m = b[0];

m &= 0xff;

m |= ((long) b[1] << 8);

m &= 0xffff;

m |= ((long) b[2] << 16);

m &= 0xffffff;

m |= ((long) b[3] << 24);

m &= 0xffffffffl;

m |= ((long) b[4] << 32);

m &= 0xffffffffffl;

m |= ((long) b[5] << 40);

m &= 0xffffffffffffl;

m |= ((long) b[6] << 48);

m &= 0xffffffffffffffl;

m |= ((long) b[7] << 56);

return Double.longBitsToDouble(m);

}

/**

* float到字节数组的转换.

*/

public static void floatToByte(float x) {

//先用 Float.floatToIntBits(f)转换成int

}

/**

* 字节数组到float的转换.

*/

public static float getFloat(byte[] b) {

// 4 bytes

int accum = 0;

for ( int shiftBy = 0; shiftBy < 4; shiftBy++ ) {

accum |= (b[shiftBy] & 0xff) << shiftBy * 8;

}

return Float.intBitsToFloat(accum);

}

/**

* char到字节数组的转换.

*/

public static byte[] charToByte(char c){

byte[] b = new byte[2];

b[0] = (byte) ((c & 0xFF00) >> 8);

b[1] = (byte) (c & 0xFF);

return b;

}

/**

* 字节数组到char的转换.

*/

public static char byteToChar(byte[] b){

char c = (char) (((b[0] & 0xFF) << 8) | (b[1] & 0xFF));

return c;

}

/**

* string到字节数组的转换.

*/

public static byte[] stringToByte(String str) throws UnsupportedEncodingException{

return str.getBytes("GBK");

}

/**

* 字节数组到String的转换.

*/

public static String bytesToString(byte[] str) {

String keyword = null;

try {

keyword = new String(str,"GBK");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return keyword;

}

/**

* object到字节数组的转换

*/

@Test

public void testObject2ByteArray() throws IOException,

ClassNotFoundException {

// Object obj = "";

Integer[] obj = { 1, 3, 4 };

// // object to bytearray

ByteArrayOutputStream bo = new ByteArrayOutputStream();

ObjectOutputStream oo = new ObjectOutputStream(bo);

oo.writeObject(obj);

byte[] bytes = bo.toByteArray();

bo.close();

oo.close();

System.out.println(Arrays.toString(bytes));

Integer[] intArr = (Integer[]) testByteArray2Object(bytes);

System.out.println(Arrays.asList(intArr));

byte[] b2 = intToByte(123);

System.out.println(Arrays.toString(b2));

int a = byteToInt(b2);

System.out.println(a);

}

/**

* 字节数组到object的转换.

*/

private Object testByteArray2Object(byte[] bytes) throws IOException,

ClassNotFoundException {

// byte[] bytes = null;

Object obj;

// bytearray to object

ByteArrayInputStream bi = new ByteArrayInputStream(bytes);

ObjectInputStream oi = new ObjectInputStream(bi);

obj = oi.readObject();

bi.close();

oi.close();

System.out.println(obj);

return obj;

}

}

以上这篇java byte[] 的互转操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

原文链接:https://blog.csdn.net/huangdingsheng/article/details/93400547

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java 流与 byte[] 的互转操作 https://www.kuaiidc.com/116837.html

相关文章

发表评论
暂无评论