【IO】InputStream的read(byte[] b)方法

本文详细介绍了Java中InputStream类的基本概念及其使用方法,重点讲解了read(byte[] b)方法的功能和应用实例。通过代码演示了如何从输入流读取字节,并解释了ASCII码与字符之间的转换。


一、关于IO中的InputStream中的read(byt[] b)方法:

/***
 * @InputStream助学笔记
 * 1、测试InputStream的使用。<p/>
 * 2、java.lang.Object->java.io.InputStream。<p/>
 * 3、InputStream 实现的接口有Closeable。<p/>
 * 4、public abstract class InputStream extends Object implements Closeable。<p/>
 * 5、直接已知子类:<p/>
 *       AudioInputStream,ByteArrayInputStream,FileInputStream,FilterInputStream,<p/>
 *       InputStream,ObjectInputStream,SequenceInputStream<p/>
 *  6、次抽象类是表示字节输入流的所有类的超类。需要定义InputStream子类的应用程序必须总是返回下一个输入字节的方法。<p/>
 *  7、InputStream中的方法:<p/>
 *  (1)abstract int read():从输入流中读取数据的下一个字节。<p/>
 *  (2)int read(byte[] b):从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。此处“换行('\r''\n')的转义字符的ASSIC码值是:13,10”。<p/>
 *  (3) 
 *  
 *@author <a"283505495@qq.com">lxd</a>
 *@version 1.0 2017-3-11 下午10:11:05
 *@fileName InputStreamDemo1.java
 */

二、演示代码:

public class InputStreamDemo1 {
	public static void main(String[] args) {
		InputStream inputStream=System.in;
		byte[] b=new byte[512];
		try {
			int n=inputStream.read(b);
			for(int i=0;i<n;i++){
				/***
				 * 此处“换行('\r''\n')的转义字符的ASSIC码值是:13,10”
				 */
				if(i==0){System.out.print("读取到b数组中的 "+n+" 个字节为:\n"+b[i]+"<==>"+(char)b[i]+",");
			}else{
				System.out.print(+b[i]+"<==>"+(char)b[i]+",");
			}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

三、运行结果:


1、从运行结果可以看出:

(1)InputStream中的read(byte[] b)方法是:从输入流中读取一定数量的字节,并将其存储在缓冲区数组b 中。以整数形式返回实际读取的字节数。

(2)read方法读取某的一个字节可以转换为相应的ASSIC码字符,因此ASSIC码为13对应的是回车('\r')、10对应的是换行('\n'),这个我们可以从运行结果看出。

(3)windows中的换行符是\r\n,linux/unix下的换行符是\n。其中:回车符:\r=0x0d (13) return #回车;换行符:\n=0x0a (10) newline#换行。

### 使用 OkHttp 发送 GET 请求的示例 为了在 `MainActivity` 中使用 OkHttp 发送 HTTP 请求,需遵循以下过程: #### 添加依赖项 要在项目中集成 OkHttp 库,应在项目的构建文件 (build.gradle) 的 `dependencies` 部分加入相应版本的库声明[^2]: ```gradle dependencies { ... implementation "com.squareup.okhttp3:okhttp:4.9.0" } ``` 同步 Gradle 后即可开始编写网络请求逻辑。 #### 创建 OkHttpClient 实例 通常情况下只需要创建一次 OkHttpClient 实例,并在整个应用程序生命周期内重复利用它来发起多个请求。这可以通过静态变量或单例模式实现[^1]: ```kotlin val client = OkHttpClient() ``` #### 构建 Request 对象并执行异步调用 当准备就绪时,可以按照下面的方式定义一个名为 `sendRequestWithOkHttp()` 方法用于发送 GET 请求: ```kotlin fun sendRequestWithOkHttp(urlString: String) { // 定义要访问的目标 URL 地址 val url = HttpUrl.Builder().scheme("https").host("api.example.com").addPathSegment("data").build() // 构造一个新的请求对象 val request = Request.Builder() .url(url) .get() // 显式指定这是一个GET类型的HTTP请求 .build() // 获得 Call 对象并通过 enqueue 执行异步操作 client.newCall(request).enqueue(object : Callback { override fun onFailure(call: Call, e: IOException) { Log.e("OkHttp", "Failed to execute request.", e) } @Throws(IOException::class) override fun onResponse(call: Call, response: Response) { if (!response.isSuccessful) throw IOException("Unexpected code $response") for ((name, value) in response.headers) { println("$name: $value") } println(response.body!!.string()) } }) } ``` 此方法接收目标服务器地址作为参数,并返回来自该资源的数据流。注意这里采用的是非阻塞方式发出请求;即不会等待响应完成后再继续往下执行其他代码——而是立即返回控制权给主线程,而一旦收到回复则会触发回调函数处理结果数据。 #### 修改布局文件以便启动请求 为了让用户能够触发展开实际的网络交互行为,可以在 XML 布局文件里放置按钮控件供点击事件绑定之用[^4] : ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 这里的 id 将被用来关联 UI 组件 --> <Button android:id="@+id/getAppDataBtn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Get App Data"/> </LinearLayout> ``` 最后一步是在 Activity 类里面设置监听器以捕捉用户的动作从而激活上述提到过的 `sendRequestWithOkHttp()` 函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值