詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(二十四) —— NSOutputStream(一)

版本記錄

版本號(hào) 時(shí)間
V1.0 2018.03.19

前言

我們做APP發(fā)起網(wǎng)絡(luò)請(qǐng)求,一般都是使用框架,這些框架的底層也都是蘋(píng)果的API,接下來(lái)幾篇就一起來(lái)看一下和網(wǎng)絡(luò)有關(guān)的幾個(gè)類(lèi)。感興趣的可以看上面幾篇文章。
1. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi) (一) —— NSURLSession
2. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(二) —— NSURLRequest和NSMutableURLRequest
3. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(三) —— NSURLConnection
4. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(四) —— NSURLSession和NSURLConnection的區(qū)別
5. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(五) —— 關(guān)于NSURL加載系統(tǒng)(一)
6. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(六) —— 使用NSURLSession(二)
7. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(七) —— URL數(shù)據(jù)的編碼和解碼(三)
8. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(八) —— 處理重定向和其他請(qǐng)求更改(四)
9. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(九) —— 身份驗(yàn)證挑戰(zhàn)和TLS鏈驗(yàn)證(五)
10. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(十) —— 理解獲取緩存(六)
11. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(十一) —— Cookies和自定義協(xié)議(七)
12. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(十二) —— URL Session的生命周期(八)
13. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(十三) —— NSURLResponse(一)
14. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(十四) —— NSHTTPCookie(一)
15. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(十五) —— NSHTTPCookieStorage(一)
16. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(十六) —— NSURLCache(一)
17. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(十七) —— NSCachedURLResponse(一)
18. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(十八) —— NSURLAuthenticationChallenge(一)
19. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(十九) —— NSURLProtectionSpace(一)
20. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(二十) —— NSURLCredential(一)
21. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(二十一) —— NSURLCredentialStorage(一)
22. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(二十二) —— NSStream(一)
23. 詳細(xì)解析幾個(gè)和網(wǎng)絡(luò)請(qǐng)求有關(guān)的類(lèi)(二十三) —— NSInputStream(一)

回顧

上一篇講述了NSInputStream這個(gè)類(lèi)的詳細(xì)信息以及一些注意要點(diǎn),下面這篇我們就主要看一下NSOutputStream


Overview

NSOutputStreamCore FoundationCFWriteStreamRef“toll-free bridged”。 有關(guān)toll-free bridged的更多信息,請(qǐng)參閱Toll-Free Bridging。

下面看一下該類(lèi)的基本信息。


Subclassing Notes

NSOutputStream是NSStream的一個(gè)具體子類(lèi),可讓您將數(shù)據(jù)寫(xiě)入流。 盡管NSOutputStream對(duì)于大多數(shù)需要此功能的情況來(lái)說(shuō)可能已足夠,但是如果您需要更專(zhuān)業(yè)的行為(例如,您想記錄流中數(shù)據(jù)的統(tǒng)計(jì)信息),則可以創(chuàng)建NSOutputStream的子類(lèi)。

Methods to Override - 重寫(xiě)的方法

要?jiǎng)?chuàng)建NSOutputStream的子類(lèi),您可能必須為所支持的流數(shù)據(jù)類(lèi)型實(shí)現(xiàn)初始化程序,并適當(dāng)?shù)刂匦聦?shí)現(xiàn)現(xiàn)有初始化程序。 您還必須提供以下方法的完整實(shí)現(xiàn):

從當(dāng)前寫(xiě)入指針開(kāi)始,從客戶(hù)端提供的緩沖區(qū)(第一個(gè)參數(shù))調(diào)用maxLength:參數(shù)中指定的字節(jié)數(shù),然后將它們放到流中。 緩沖區(qū)必須是第二個(gè)參數(shù)指定的大小。 為了準(zhǔn)備下一個(gè)操作,將寫(xiě)入指針偏移寫(xiě)入的字節(jié)數(shù)。 根據(jù)當(dāng)前操作的結(jié)果返回一個(gè)有符號(hào)的整數(shù):

1)如果寫(xiě)操作成功,則返回放入流中的實(shí)際字節(jié)數(shù)。
2)如果流的長(zhǎng)度固定并已達(dá)到其容量,則返回0。
3)如果寫(xiě)入流時(shí)發(fā)生錯(cuò)誤,則返回-1。

如果數(shù)據(jù)流當(dāng)前可以接受更多數(shù)據(jù),則返回YES;如果數(shù)據(jù)流不能,則返回NO。 如果您希望與NSOutputStream在語(yǔ)義上兼容,如果必須嘗試寫(xiě)入以確定空間是否可用,請(qǐng)返回YES。


Topics

1. Creating Streams - 創(chuàng)建流

2. Using Streams - 使用流

  • hasSpaceAvailable

    • 一個(gè)布爾值,指示是否可以寫(xiě)入接收者。
  • - write:maxLength:

    • 將提供的數(shù)據(jù)緩沖區(qū)的內(nèi)容寫(xiě)入接收器。

API

1. NSOutputStream本類(lèi)

NSOutputStream是表示寫(xiě)入流的基本功能的抽象類(lèi)。 子類(lèi)需要實(shí)現(xiàn)這些方法。

// NSOutputStream is an abstract class representing the base functionality of a write stream.
// Subclassers are required to implement these methods.
@interface NSOutputStream : NSStream
- (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)len;
    // writes the bytes from the specified buffer to the stream up to len bytes. Returns the number of bytes actually written.

@property (readonly) BOOL hasSpaceAvailable;
    // returns YES if the stream can be written to or if it is impossible to tell without actually doing the write.

- (instancetype)initToMemory NS_DESIGNATED_INITIALIZER;
- (instancetype)initToBuffer:(uint8_t *)buffer capacity:(NSUInteger)capacity NS_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithURL:(NSURL *)url append:(BOOL)shouldAppend API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)) NS_DESIGNATED_INITIALIZER;

@end

2. NSOutputStream分類(lèi)NSOutputStreamExtensions

// The NSOutputStreamExtensions category contains additional initializers and convenience routines for dealing with NSOutputStreams.
@interface NSOutputStream (NSOutputStreamExtensions)

- (nullable instancetype)initToFileAtPath:(NSString *)path append:(BOOL)shouldAppend;

+ (instancetype)outputStreamToMemory;
+ (instancetype)outputStreamToBuffer:(uint8_t *)buffer capacity:(NSUInteger)capacity;
+ (instancetype)outputStreamToFileAtPath:(NSString *)path append:(BOOL)shouldAppend;
+ (nullable instancetype)outputStreamWithURL:(NSURL *)url append:(BOOL)shouldAppend API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));

@end

后記

本篇主要講述了類(lèi)NSOutputStream的基本信息和接口使用,喜歡的給個(gè)贊或者關(guān)注,謝謝~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容