Skip to content

Commit 05ac162

Browse files
committed
Start changing over to use streams instead of byte[]
1 parent 67f484a commit 05ac162

File tree

5 files changed

+39
-6
lines changed

5 files changed

+39
-6
lines changed

src/main/java/httpserver/response/PartialContentResponse.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22

33
import httpserver.Range;
44

5+
import java.io.ByteArrayInputStream;
56
import java.util.Arrays;
67

78
public class PartialContentResponse extends Response {
89
public PartialContentResponse(Range range, byte[] payload) {
910
byte[] partialPayload = getPartialPayload(range, payload);
10-
super.setPayload(partialPayload);
11+
super.setPayloadStream(new ByteArrayInputStream(partialPayload));
1112
}
1213

1314
private byte[] getPartialPayload(Range range, byte[] payload) {

src/main/java/httpserver/response/Response.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
import httpserver.header.ContentLengthHeader;
44
import httpserver.header.Header;
55

6+
import java.io.ByteArrayInputStream;
67
import java.io.IOException;
8+
import java.io.InputStream;
79
import java.io.OutputStream;
810
import java.util.ArrayList;
911
import java.util.List;
1012

1113
public abstract class Response {
1214
private byte[] payload;
15+
private InputStream payloadStream;
1316
private final List<Header> headers;
1417
private boolean isHead;
1518

@@ -25,6 +28,14 @@ public void setPayload(byte[] newPayload) {
2528
payload = newPayload;
2629
}
2730

31+
public InputStream getPayloadStream() {
32+
return payloadStream;
33+
}
34+
35+
public void setPayloadStream(InputStream payloadStream) {
36+
this.payloadStream = payloadStream;
37+
}
38+
2839
public Header[] getHeaders() {
2940
return headers.toArray(new Header[0]);
3041
}
@@ -34,6 +45,14 @@ public void setHeader(Header header) {
3445
}
3546

3647
public Header getContentLengthHeader() {
48+
if (payloadStream != null) {
49+
int data = payloadStream.read();
50+
while(data != -1){
51+
System.out.print((char) data);
52+
outputStream.write(data);
53+
data = payloadStream.read();
54+
}
55+
}
3756
return new ContentLengthHeader(payload);
3857
}
3958

@@ -47,4 +66,13 @@ public void writePayload(OutputStream outputStream) throws IOException {
4766
}
4867
outputStream.write(payload);
4968
}
69+
70+
public void writePayloadStream(OutputStream outputStream) throws IOException {
71+
int data = payloadStream.read();
72+
while(data != -1){
73+
System.out.print((char) data);
74+
outputStream.write(data);
75+
data = payloadStream.read();
76+
}
77+
}
5078
}

src/main/java/httpserver/response/TeapotResponse.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package httpserver.response;
22

3+
import java.io.ByteArrayInputStream;
4+
import java.io.InputStream;
5+
36
public class TeapotResponse extends Response {
47
public TeapotResponse() {
5-
super.setPayload("I'm a teapot".getBytes());
8+
InputStream inputStream = new ByteArrayInputStream("I'm a teapot".getBytes());
9+
super.setPayloadStream(inputStream);
610
}
711

812
public int getStatusCode() {

src/test/java/httpserver/response/PartialContentResponseTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ public void partialRange() throws Exception {
1717
assertEquals(new Header("Content-Length", "6"), partialContentResponse.getContentLengthHeader());
1818
OutputStream outputStreamMock = mock(OutputStream.class);
1919
partialContentResponse.writePayload(outputStreamMock);
20-
verify(outputStreamMock).write("ged te".getBytes());
20+
verify(outputStreamMock, times(6)).write(anyInt());
2121
}
2222
}

src/test/java/httpserver/response/TeapotResponseTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ public void hasStatusCode405() throws Exception {
2323
}
2424

2525
@Test
26-
public void hasEmptyPayload() throws Exception {
26+
public void hasCorrectPayload() throws Exception {
2727
OutputStream outputStreamMock = mock(OutputStream.class);
28-
teapotResponse.writePayload(outputStreamMock);
29-
verify(outputStreamMock).write("I'm a teapot".getBytes());
28+
teapotResponse.writePayloadStream(outputStreamMock);
29+
verify(outputStreamMock, times(12)).write(anyInt());
3030
}
3131

3232
@Test

0 commit comments

Comments
 (0)