Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialDaniel Tkach
7,608 PointsWhy not skip the MemoryReader and the rest and return right away the byte[]?
I wonder why not convert the byte[] to string and return that, or just return the byte[].
What are we achieving by amassing the bytes with these lines:
using(var stream = new MemoryStream(googleHome))
using(var reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
We put the bytes[] into a MemoryStream so that then we get this stream and put it in the reader to then return what, a string from the ReadToEnd() method. All this does not make any sense for me lol
3 Answers
James Churchill
Treehouse TeacherDaniel,
Thanks for your question!
I believe that Carling is converting the byte array to a string in order to output the web page's HTML to the console. If you pass the byte array directly to the Console.WriteLine
method, you get System.Byte[]
as the output.
But you are correct in that you can convert the byte array to a string without using the stream/reader combo. In fact, there are many ways in .NET to do this; here's just one example:
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadData("https://www.google.com");
string stringData = System.Text.Encoding.Default.GetString(data);
Console.WriteLine(stringData);
However, one advantage to using Carling's approach is that we don't need to know the encoding of the string data in order to do the conversion. That may or may not impact your results, so your mileage might vary.
Thanks ~James
David Lin
35,864 PointsA more direct alternative to get a string as the response is to use WebClient's DownloadString method.
public static string GetStringResponse(string url)
{
string response = "";
using(var webClient = new WebClient())
{
response = webClient.DownloadString(url);
}
return response;
}
Daniel Tkach
7,608 PointsWow thanks for letting me know. Yeah I think I saw the first one planned for next month. This eases my anxiety a bit ha!
Daniel Tkach
7,608 PointsDaniel Tkach
7,608 PointsAmazing James, thank you so much for the explanation. I'm about to finish the C# track and I'm looking forward to starting your lessons! Please do more, ASP is what interests me the most at the moment. See you around.
James Churchill
Treehouse TeacherJames Churchill
Treehouse TeacherThanks Daniel! I'm working on a new ASP.NET MVC related course now... "Using Entity Framework with ASP.NET MVC" and will then move on to courses on Web API and Identity. So, lots of great content coming in the coming months.